2012-04-08 8 views
0

Entschuldigung wegen dieser wahrscheinlich zu einfachen Frage, aber ich weiß nicht, wie ich das umsetzen soll. Wenn bestimmte Methode für bestimmte Zeit nicht aufgerufen wurde, muss ich ein Ereignis auslösen (wenn ich dieses Ereignis erhalte, werde ich versuchen, Problem zu beheben. Dies ist ein Problem Verbindung und ich muss darüber informiert werden, um es zu lösen versuchen - ich ändern Verbindungsmethode wird.)Wie wird das Ereignis ausgelöst, wenn die Methode in den letzten 5 Sekunden nicht aufgerufen wurde?

public void MethodThatShouldBeCalledFrequently // acutally datagram from UDP received 
{ 
    // if not called for 5 seconds than raise event 
} 
public event EventHandler</*no parameters*/> MethodNotCalledForFiveSeconds; // connection problem, switch from UDP to TCP 
+0

Kannst du keinen neuen Timer innerhalb dieser Methode setzen? – anuragsn7

+0

@ anuragsn7 Ich kann alles in dieser Methode tun – javapowered

+0

@ anuragsn7 Ich brauche etwas wie Stoppuhr, aber "umgekehrt" sollte es Countdown ab 5 Sekunden, und wenn 0 Sekunden sollte es ein Ereignis auslösen. Bei jedem Methodenaufruf sollte ich die Stoppuhr auf "5 Sekunden" zurücksetzen – javapowered

Antwort

0

Was ist damit?

public class Program 
{ 
    private Timer timer; 

    public Program() 
    { 
     InitializeTimer(); 
     StartTimerFromBeginning(); 
    } 

    public void MethodThatShouldBeCalledFrequently() 
    { 
     StartTimerFromBeginning(); 
    } 

    public event EventHandler MethodNotCalledForFiveSeconds; 

    private void InitializeTimer() 
    { 
     timer = new Timer(5000); 
     timer.Elapsed += HandleTimerElapsed; 
    } 

    private void StartTimerFromBeginning() 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 

    private void HandleTimerElapsed(object sender, ElapsedEventArgs e) 
    { 
     MethodNotCalledForFiveSeconds(this, EventArgs.Empty); 
    } 
} 
+0

bin ich verpflichtet, jedes Mal einen 'neuen' Timer zu erstellen? Kann ich Timer wiederverwenden? weil Methode mehrere tausend Mal pro Sekunde aufgerufen wird ... – javapowered

+0

@javapowered Du bist nicht - Ich habe meine Antwort so bearbeitet, dass der 'Timer' nur einmal erstellt und dann neu gestartet wird. Zuerst dachte ich, dass der 'Timer' nicht neu gestartet werden kann, aber eine schnelle Probe hat das Gegenteil bewiesen :) –

+0

danke! Antwort als richtig zu markieren, es sei denn, jemand kann etwas schöner vorschlagen :) – javapowered

0

Vielleicht können Sie ein Flag verwenden und setzen Sie ihn auf true, wenn MethodThatShouldBeCalledFrequently genannt wird.

 bool wasCalled = false; 
    public void MethodThatShouldBeCalledFrequently // acutally datagram from UDP received 
    { 
     wasCalled = true; 
     } 

andere Methode verwendet bei jeweils 5 Sekunden zu überprüfen, ob das Flag wahr oder falsch ist, und wenn es falsch ist, dann das Ereignis auslösen.

+0

ich verstehe nicht, wie das funktionieren soll – javapowered

Verwandte Themen