131 votes

Comment faire pour réinitialiser le minuteur en C#?

Il y a trois Timer les classes que je suis au courant, System.Threading.Timer, System.Timers.Timer, et System.Windows.Forms.Timer, mais aucun d'entre eux ont un .Reset() fonction qui permettrait de remettre le temps écoulé à 0.

Est-il BCL classe qui dispose de cette fonctionnalité? Est-il un non-hack, moyen de le faire? (J'ai pensé que peut-être la modification de la limite de temps peut réinitialiser) réflexion sur la manière de dur il serait ré-écrire un Timer de la classe qui ont cette fonctionnalité, ou comment le faire de manière fiable avec un de la BCL classes?

170voto

JP Alioto Points 33482

Je le fais toujours ...

myTimer.Stop();
myTimer.Start();

... est-ce un hack? :)

Par commentaire, sur le Filetage.À rebours, c'est le Changement de méthode ...

dueTime Type: System.Int32Le quantité de temps de retard avant que le l'invocation de la méthode de rappel spécifié lorsque la Minuterie a été construit, en millisecondes. Spécifier Timeout.Infinite pour prévenir la temporisateur de redémarrage. Indiquez zéro (0) pour redémarrer le chronomètre immédiatement.

68voto

Dan Points 1237

Tous les compteurs ont l'équivalent de Start() et Stop() les méthodes, à l'exception du Système.Le filetage.Minuterie.

Donc, une méthode d'extension, tels que...

public static void Reset(this Timer timer)
{
  timer.Stop();
  timer.Start();
}

...est une façon d'aller à ce sujet.

32voto

mMontu Points 2843

Pour System.Timers.Timer, selon la documentation MSDN, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx:

Si l'intervalle est défini après le compte à rebours est commencé, le nombre est réinitialiser. Par exemple, si vous définissez l'intervalle de 5 secondes et ensuite définir la propriété Enabled à true, le décompte commence à l'heure est Activée ensemble. Si la réinitialisation de l'intervalle de 10 secondes lorsque le comte est de 3 secondes, le temps Écoulé événement est déclenché pour la première fois en 13 secondes après Permis a été définie à true.

Donc,

    const double TIMEOUT = 5000; // milliseconds

    aTimer = new System.Timers.Timer(TIMEOUT);
    aTimer.Start();     // timer start running

    :
    :

    aTimer.Interval = TIMEOUT;  // restart the timer

8voto

Gishu Points 59012

Vous pourriez écrire une extension de la méthode appelée Reset(), qui

  • appelle la méthode Start()-Stop() pour le timer.Minuterie et de Formes.Minuterie
  • les appels de Changement pour le Filetage.Minuterie

3voto

elmsoftware Points 21

Pour un Timer (Système d'.De Windows.Les formulaires.Minuterie).

L' .Stop, puis .Démarrer méthodes travaillé comme une remise à zéro.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X