2010-12-30 3 views
46

Je sais que cela semble stupide, mais j'ai tout essayé pour arrêter une minuterie, mais la minuterie ne s'arrêtera pas. Je travaille sur un jeu et j'apprécierais que quelqu'un puisse me dire comment arrêter une minuterie.C# - comment arrêtez-vous une minuterie?

+7

postez votre code pour un bon début. – Pabuc

+1

Montrez-nous du code – Kimtho6

+3

Lequel des minuteries? Il y en a 4 que je connais, juste dans la BCL. – Oded

Répondre

105

Si vous utilisez System.Timers.Timer vous pouvez arrêter comme ça

timer.Enabled = false 

si vous utilisez System.Threading.Timer, utiliser cette

timer.Change(Timeout.Infinite , Timeout.Infinite) 

Ou utilisez

timer.Stop(); 

si vous utilisez System.Windows.Forms.Timer

1

En supposant que vous utilisez le System.Windows.Forms.Timer; car il n'y avait pas de référence explicite à rien d'autre ... si tel est le cas ...

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer(); 
myTimer.Stop(); 
17

System.Windows.Forms.Timer: timer.Enabled = false;
System.Threading.Timer: timer.Change(Timeout.Infinite, Timeout.Infinite);
System.Timers.Timer: timer.Enabled = false; ou timer.Stop();

5

Avec chacun des minuteries Dans le framework .NET, il est possible que la minuterie se déclenche juste avant de l'arrêter, ainsi vous verrez le rappel après l'avoir arrêté.

Vous aurez besoin d'utiliser quelque chose comme un asynchronous callback context: utiliser un ensemble bool à true lorsque vous voulez que le fonctionnement de la minuterie et réglez sur false lorsque vous l'arrêtez. Ensuite, demandez à votre callback de vérifier votre contexte pour voir s'il devrait vraiment fonctionner ou non.

+1

Je suis content d'avoir trouvé cette information ici aussi. J'utilise, au lieu de variable supplémentaire, la vérification si le minuteur est encore activé dans le rappel du minuteur. – Fanda

1

Dépend de la minuterie. S'il provient d'un espace de noms de threads, éliminez-le et recréez-le quand vous en avez besoin, ou demandez à votre temporisateur de déléguer l'événement de réinitialisation (voir msdn). L'espace de noms System.Timers a une méthode start et stop.

15

Donc, pour ajouter aux réponses précédentes, dans le cas où vous utilisez la classe System.Threading.Timer, cela arrêtera définitivement sans autre possibilité d'utiliser la même instance:

timer.Dispose() 

autrement:

timer.Change(Timeout.Infinite, Timeout.Infinite)