Es gibt drei Timer
Klassen, die mir bekannt System.Threading.Timer
sind System.Timers.Timer
, und System.Windows.Forms.Timer
, aber keine davon hat eine .Reset()
Funktion, die die aktuell verstrichene Zeit auf 0 zurücksetzen würde.
Gibt es eine BCL-Klasse mit dieser Funktionalität? Gibt es eine Non-Hack-Methode? (Ich dachte, eine Änderung des Zeitlimits könnte es möglicherweise zurücksetzen.) Überlegt, wie schwierig es wäre, eine Timer
Klasse mit dieser Funktionalität erneut zu implementieren , oder wie man es zuverlässig mit einer der BCL-Klassen macht.
Antworten:
Mache ich immer ...
... ist das ein Hack? :) :)
Laut Kommentar auf Threading.Timer ist es die Änderungsmethode ...
quelle
Forms.Timer
sollte jedoch nur mit einer GUI verwendet werden. Doch nebenForms.Timer
undThreading.Timer
gibt es auchTimers.Timer
.Alle Timer mit Ausnahme von System.Threading.Timer entsprechen den Methoden Start () und Stop ().
Also eine Erweiterungsmethode wie ...
... ist ein Weg, dies zu tun.
quelle
timer.Start()
. Ich habe diese Linqpad-Abfrage durchgeführt , um sie zu testen. Versuchen Sie es zu entfernentimer.Stop
und Sie werden den Unterschied sehen.Für
System.Timers.Timer
nach MSDN - Dokumentation, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :So,
quelle
Sie könnten eine Erweiterungsmethode namens Reset () schreiben, die
quelle
Ich habe dem Timer gerade einen neuen Wert zugewiesen:
es funktioniert gut für mich.
Definieren Sie oben im Code den Timer:
System.Threading.Timer myTimer;
quelle
Aus Gründen der Übersichtlichkeit wird die verstrichene Zeit zurückgesetzt , wenn die
System.Timers
Einstellung Enabled auf true gesetzt ist, da einige andere Kommentare falsch sind . Ich habe das Verhalten gerade mit folgendem getestet:Ich würde wiederholt Text in das Textfeld eingeben und der Timer würde nur 3 Sekunden nach dem letzten Tastendruck laufen. Wie Sie sehen werden, wird dies auch in den Dokumenten angedeutet:
Timers.Start()
Wenn Sie aufrufen, wird Enabled einfach auf true gesetzt.Und um sicher zu sein, worauf ich von Anfang an hätte eingehen sollen, sehen Sie in der .NET-Referenzquelle, dass beim Aktivieren eines bereits aktivierten Timers die private
UpdateTimer()
Methode aufgerufen wird, die intern aufgerufen wirdChange()
.quelle
UpdateTtimer
Methode wird genau dann aufgerufen, wenn der aktuelle Wert vonEnabled
nicht dem neuen entsprichtvalue
.Für einen Timer (System.Windows.Forms.Timer).
Die Methoden .Stop und dann .Start fungierten als Reset.
quelle
Eine andere alternative Möglichkeit zum Zurücksetzen von windows.timer ist die Verwendung des Zählers wie folgt:
Wenn Sie also alle 1 Sekunde wiederholen möchten, können Sie das Timer-Intervall auf 100 ms einstellen und den Zähler auf 10 Zyklen testen.
Dies ist geeignet, wenn der Timer auf einige Prozesse warten soll, die möglicherweise zu einem anderen Zeitpunkt beendet werden.
quelle
Ich mache das
quelle
Du kannst tun
timer.Interval = timer.Interval
quelle