Hay tres Timer
clases que yo sepa, System.Threading.Timer
, System.Timers.Timer
, y System.Windows.Forms.Timer
, pero ninguno de ellos tiene una .Reset()
función que se restablezca el tiempo transcurrido actual en 0.
¿Existe una clase BCL que tenga esta funcionalidad? ¿Hay alguna forma de hacerlo sin piratear? (Pensé que tal vez cambiar el límite de tiempo podría restablecerlo) ¿Pensó en lo difícil que sería volver a implementar una Timer
clase que tuviera esta funcionalidad, o cómo hacerlo de manera confiable con una de las clases BCL?
Respuestas:
Siempre hago ...
... eso es un truco? :)
Por comentario, en Threading.Timer, es el método de cambio ...
fuente
Forms.Timer
solo debe usarse con una GUI. Sin embargo, ademásForms.Timer
yThreading.Timer
también hayTimers.Timer
.Todos los temporizadores tienen el equivalente a los métodos Start () y Stop (), excepto System.Threading.Timer.
Entonces, un método de extensión como ...
... es una forma de hacerlo.
fuente
timer.Start()
. Hice esta consulta de Linqpad para probarlo. Intente quitarlotimer.Stop
y verá la diferencia.Para
System.Timers.Timer
, según la documentación de MSDN, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :Entonces,
fuente
Podría escribir un método de extensión llamado Reset (), que
fuente
Acabo de asignar un nuevo valor al temporizador:
Funciona bien para mí.
en la parte superior del código, defina el temporizador:
System.Threading.Timer myTimer;
fuente
Para mayor claridad, ya que algunos otros comentarios son incorrectos, cuando se utiliza el
System.Timers
ajuste Activado en verdadero, se restablecerá el tiempo transcurrido. Acabo de probar el comportamiento con lo siguiente:Ingresaría texto en el cuadro de texto repetidamente y el temporizador solo funcionaría 3 segundos después de la última pulsación de tecla. También se insinúa en los documentos, como verá: la llamada
Timers.Start()
simplemente establece Enabled en verdadero.Y para estar seguro, a lo que debería haber ido directamente desde el principio, verá en la fuente de referencia de .NET que si habilita un temporizador ya habilitado, llama al
UpdateTimer()
método privado , que llama internamenteChange()
.fuente
UpdateTtimer
método privado se llama si y solo si el valor actual deEnabled
no es igual al nuevovalue
.Para un temporizador (System.Windows.Forms.Timer).
Los métodos .Stop, luego .Start funcionaron como un reinicio.
fuente
Otra forma alternativa de restablecer el temporizador de windows es usando el contador, de la siguiente manera:
Entonces, si tiene la intención de repetir cada segundo, puede configurar el intervalo del temporizador en 100 ms y probar el contador en 10 ciclos.
Esto es adecuado si el temporizador debe esperar a que algunos procesos finalicen en un lapso de tiempo diferente.
fuente
hago esto
fuente
Tu puedes hacer
timer.Interval = timer.Interval
fuente