2016-08-30 5 views
0

Sagen wir, ich habe diesen CodeStoppen eines System.Timers.Timer

public static Timer timer; 

static void Main() 
{ 
    timer = new Timer (60 * 1000); // It ticks every minute 
    timer.Elpased += One; 
    timer.Elapsed += Two; 
} 

private static void One (sender o, EventArgs e) 
{ 
    timer.Stop(); 
} 

private static void Two (sender o, EventArgs e) 
{ 
    DoSomething(); 
} 

Da ich, dass ‚One‘ gehe davon aus und ‚Two‘ wird ausgeführt, um abonnieren, in ‚One‘ die Timer gestoppt wird verhindern, dass "Zwei" passiert?

Wenn nicht, wie kann ich es tun?

+1

Überprüfen Sie den Timer-Status in Two –

+0

Wenn Sie 'timer.Elapsed - = One 'aufrufen, wird' Two' noch ausgeführt, da der Delegat von 'One' entfernt wird, der Code jedoch nicht ausgeführt wird. – Edgar

+0

@ EdgarsŠturms Yeah, aber timer.Elapsed - = Two on One wird nicht stoppen Zwei von der Ausführung – marsh

Antwort

1

System.Threading.Timer hat kein Elapsed Ereignis. Es erfordert einen einzelnen TimerCallback Delegaten, der an den Konstruktor übergeben wird, den es auf einem ThreadPool-Thread ausführt.

https://msdn.microsoft.com/en-us/library/system.threading.timer(v=vs.110).aspx

Ich glaube, Sie bei System.Timers.Timer suchen, das hat eine Elapsed Ereignis.

https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx

Ich glaube nicht, es gibt einen Weg, einen Weg zu garantieren Two von Brennen der Art und Weise zu verhindern, dass Sie beschreiben. Sie müssen davon ausgehen, dass One und Two gleichzeitig auf 2 verschiedenen Threads ausgeführt werden. Selbst wenn Sie Stop() anrufen, wird nicht garantiert, dass der Timer eine zusätzliche Zeit abfeuern kann: https://msdn.microsoft.com/en-us/library/system.timers.timer.stop(v=vs.110).aspx.

Mein Vorschlag wäre, einen einzelnen Callback zu haben, der die Verzweigungslogik annimmt, wenn er die Aktionen in Two ausführen soll, nachdem die Logik in One ausgeführt wird.

+0

Ja, ich habe das vermisst, ich habe System.Timers (bereits bearbeitet) verwendet, auch denke ich, dass die Verzweigung der Logik mein bester Ansatz ist. Ich dachte nur, es könnte einen Weg geben, das zu verhindern. Jedenfalls ty – marsh

Verwandte Themen