2010-12-21 4 views
2

Gibt es eine Möglichkeit zu erkennen, dass abgelaufene Ereignisse des Timers sich überschneiden? Zum Beispiel erzeuge ich einen Timer mit einem Intervall von 200ms zwischen den verstrichenen Ereignissen, aber der ausgeführte Code bei einem Ereignis dauert mehr als 200 ms. Als Ergebnis wird ein weiteres verstrichenes Ereignis ausgeführt, bevor das letzte beendet wird. Gibt es auch eine Möglichkeit, dies zu verhindern, so dass ein anderes Ereignis nicht aufgerufen wird, bevor das letzte Ereignis beendet ist?.NET - Ereignisüberlappung für abgelaufene Zeit

+1

Möchten Sie, dass der zweite Anruf 200ms nach dem letzten Anruf oder sofort erscheint? – Reddog

Antwort

1

Wenn Sie Ihre Timer-Ereignisse wollen auf der 200ms Marke passieren und nur eine überspringen (und nicht verschieben sie), wenn der vorherige noch läuft, dann können Sie Sperrcode verwenden.

Wenn Sie die Methode Monitor.TryEnter verwenden, gibt es einen Boolean zurück, der Ihnen sagt, ob es die Sperre hat (und somit wenn ein anderer Thread bereits im gesperrten Code ist). Dies ermöglicht es Ihnen, einfach überzuspringen und auf die nächste Laufzeit zu warten, wenn Sie wollen (oder Debug-Nachrichten ausschreiben, die sich beschweren, dass es zu lange dauert oder so).

Ob dies eine gute Lösung ist, hängt wirklich davon ab, was Ihr Timer tun möchte. Oft ist die Methode, die andere vorgeschlagen haben, den Timer für das nächste Ereignis zu starten, sobald der vorherige abgeschlossen ist, für den Job mehr als ausreichend.

1

Verwendung Wenn Sie den nächsten Zyklus nach die aktuelle beendet ist, stoppen Sie den Timer feuern wollen, wenn er trifft es Ereignis Zecke, und es neu starten, wenn Sie fertig sind.

Timer fires Tick-Event 
    Disable/Stop Timer 
    Program logic goes here 
    Restart Timer 
Verwandte Themen