Il y a trois Timer
catégories que je suis au courant, System.Threading.Timer
, System.Timers.Timer
et System.Windows.Forms.Timer
, mais aucun d' entre eux ont une .Reset()
fonction qui réinitialiser le temps écoulé actuel à 0.
Existe-t-il une classe BCL qui possède cette fonctionnalité? Existe-t-il un moyen non piraté de le faire? (Je pensais que changer la limite de temps pourrait le réinitialiser) Vous avez pensé à quel point il serait difficile de réimplémenter une Timer
classe qui avait cette fonctionnalité, ou comment le faire de manière fiable avec l'une des classes BCL?
Réponses:
Je fais toujours ...
... est-ce un hack? :)
Par commentaire, sur Threading.Timer, c'est la méthode Change ...
la source
Forms.Timer
ne doit être utilisé qu'avec une interface graphique. Cependant, en plusForms.Timer
etThreading.Timer
il y a aussiTimers.Timer
.Tous les minuteurs ont l'équivalent des méthodes Start () et Stop (), à l'exception de System.Threading.Timer.
Donc, une méthode d'extension telle que ...
... est une façon de procéder.
la source
timer.Start()
. J'ai fait cette requête Linqpad pour la tester. Essayez de l'enlevertimer.Stop
et vous verrez la différence.Pour
System.Timers.Timer
, selon la documentation MSDN, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :Alors,
la source
Vous pouvez écrire une méthode d'extension appelée Reset (), qui
la source
Je viens d'attribuer une nouvelle valeur à la minuterie:
Ça fonctionne bien pour moi.
en haut du code définissez la minuterie:
System.Threading.Timer myTimer;
la source
Pour plus de clarté puisque certains autres commentaires sont incorrects, lorsque vous utilisez le
System.Timers
paramètre Enabled sur true , le temps écoulé est réinitialisé. Je viens de tester le comportement avec ce qui suit:Je saisissais du texte dans la zone de texte à plusieurs reprises et le minuteur ne fonctionnerait que 3 secondes après la dernière frappe. C'est également indiqué dans la documentation, comme vous le verrez: l'appel
Timers.Start()
définit simplement Enabled sur true.Et pour être sûr, ce à quoi j'aurais dû aller directement depuis le début, vous verrez dans la source de référence .NET que si vous activez un minuteur déjà activé, il appelle la
UpdateTimer()
méthode privée , qui appelle en interneChange()
.la source
UpdateTtimer
méthode privée est appelée si et seulement si la valeur actuelle deEnabled
n'est pas égale à la nouvellevalue
.Pour un minuteur (System.Windows.Forms.Timer).
Les méthodes .Stop, puis .Start fonctionnaient comme une réinitialisation.
la source
Une autre façon alternative de réinitialiser le windows.timer consiste à utiliser le compteur, comme suit:
Donc, si vous avez l'intention de répéter toutes les 1 seconde, vous pouvez régler l'intervalle de minuterie à 100 ms et tester le compteur à 10 cycles.
Cela convient si le temporisateur doit attendre certains processus, ceux-ci peuvent être terminés à des intervalles de temps différents.
la source
je fais ça
la source
Tu peux faire
timer.Interval = timer.Interval
la source