83 votes

C# - comment arrêter un timer ?

Je sais que cela semble stupide, mais j'ai tout essayé pour arrêter un minuteur, mais le minuteur ne s'arrête pas. Je travaille sur un jeu et j'apprécierais si quelqu'un pouvait me dire comment arrêter un minuteur.

10 votes

Postez votre code pour un bon départ.

3 votes

Laquelle des classes de minuteurs ? Il y en a 4 à ma connaissance, juste dans la BCL.

0 votes

En plus, essayez au moins de nous dire ce que vous avez fait pour l'arrêter. "Lire la documentation" est sinon la seule réponse valable.

183voto

ArsenMkrt Points 24447

Si vous utilisez System.Timers.Timer L'arrêt est effectué par l'une des options :

//options 1
timer.Enabled = false
//option 2
timer.Stop()

si vous utilisez System.Threading.Timer utilisez cette méthode

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

si vous utilisez System.Windows.Forms.Timer utilisez cette méthode

timer.Stop();

1 votes

Il est également intéressant de voir que System.Timers.Timer utilise un System.Threading.Timer en interne, et que Enable=false dispose le timer interne, et le recrée sur Enable=true / Start() : source.dot.net/#System.ComponentModel.TypeConverter/System/

0 votes

Désolé mais où trouvez-vous le minuteur pour l'arrêter ? Je le fais timer.Elapsed += new ElapsedEventHandler(this.OnTimer1); protected void OnTimer1(object sender, ElapsedEventArgs args) { timer.STop(); } et le compilateur lève l'erreur the name 'timer' does not exists in this current context ?

0 votes

@PhamX.Bach si vous utilisez le designer pour placer le timer, vérifiez le nom de ce timer dans les propriétés ... sinon vous devriez avoir créé le timer quelque part dans votre code pour l'arrêter plus tard.

43voto

dexter Points 2337

Pour compléter les réponses précédentes, si vous utilisez la classe System.Threading.Timer, cela l'arrêtera définitivement, sans possibilité d'utiliser la même instance :

   timer.Dispose()

autrement :

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

25voto

EricSchaefer Points 7592

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

11voto

Stephen Cleary Points 91731

Avec chacune des minuteries du cadre .NET, il est possible que la minuterie se déclenche juste avant que vous l'arrêtiez, de sorte que vous verrez le rappel après l'avoir arrêtée.

Vous devrez utiliser quelque chose comme un contexte de rappel asynchrone : utiliser un bool réglé sur true quand vous voulez que le minuteur fonctionne, et réglez-le sur false quand vous l'arrêtez. Ensuite, votre callback vérifie votre contexte pour voir s'il doit vraiment fonctionner ou non.

1voto

Aaron McIver Points 16766

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

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

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