2010-12-30 38 views
46

Sé que suena estúpido, pero he intentado todo para detener un temporizador, pero el cronómetro no se detiene. Estoy trabajando en un juego y agradecería que alguien me dijera cómo detener un temporizador.C# - ¿cómo se detiene un temporizador?

+7

publique su código para un buen comienzo. – Pabuc

+1

Muéstrenos un código – Kimtho6

+3

¿Cuál de las clases de temporizador? Hay 4 que yo sé, solo en el BCL. – Oded

Respuesta

105

Si está utilizando System.Timers.Timer puede detener como esto

timer.Enabled = false 

si está utilizando System.Threading.Timer, utilizar este

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

O utilice

timer.Stop(); 

si está utilizando System.Windows.Forms.Timer

1

Suponiendo que está haciendo uso del System.Windows.Forms.Timer; ya que no había ninguna referencia explícita a cualquier otra cosa ... si ese es el caso ...

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; o timer.Stop();

5

Con cada uno de los temporizadores en .NET framework, es posible que el temporizador se active justo antes de detenerlo, por lo que verá la devolución de llamada después de detenerlo.

Tendrá que usar algo como un asynchronous callback context: utilizar un conjunto bool a true cuando se quiere funcionando el temporizador, y la ajuste en false al detenerlo. Luego haga que su devolución de llamada verifique su contexto para ver si realmente debería ejecutarse o no.

+1

Me alegro de haber encontrado esta información aquí también. Estoy usando, en lugar de variable adicional, comprobando si el temporizador todavía está habilitado en la devolución de llamada del temporizador. – Fanda

1

Depende del temporizador. Si se trata de enhebrar el espacio de nombres, deséchelo y recíclelo cuando lo necesite, o haga que su delegado temporizador espere un evento de restablecimiento (consulte msdn). El espacio de nombre System.Timers tiene un método de inicio y detención.

15

Así que añadir a las respuestas anteriores, en caso de que está utilizando la clase System.Threading.Timer, Esto detendrá de forma permanente sin más oportunidad de utilizar la misma instancia:

timer.Dispose() 

de otro modo:

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