visual tick interval initialize form example event elapsedeventhandler .net timer

.net - tick - La mejor manera de desactivar un System.Threading.Timer



timer tick (2)

Tengo un System.Threading.Timer que se activará y desactivará. Conozco dos métodos para apagar el temporizador:

  1. Call Timer.Change(-1,-1)
  2. Deseche el temporizador y cree uno nuevo cuando sea necesario

¿Cuál es mejor, en términos de recursos y rendimiento? ¿Está llamando a Change(-1,-1) un calentador de CPU? ¿Es costoso crear un temporizador?


Establecer el valor inicial y el intervalo de un temporizador en -1 (es decir, Change(-1, -1) ) no es un "calentador de CPU". Los temporizadores no usan recursos de CPU. El método de devolución de llamada lo hace, por supuesto, pero solo durante el tiempo (generalmente breve) cuando se está ejecutando.

En cualquier caso, no es nada caro crear un nuevo temporizador, ni deshabilitarlo con Change(-1, -1) tiene consecuencias negativas en el rendimiento. Use la técnica que mejor se adapte a su modelo.


Establezca el tiempo y el período de vencimiento del temporizador a infinito para detener las operaciones temporalmente.

MyTimer.Change(Timeout.Infinite, Timeout.Infinite);

Para reanudarlo, vuelva a cambiarlo al intervalo de funcionamiento normal:

MyTimer.Change(this.RestartTimeout, this.OperationInterval);

No es necesario disponer y volver a crearlo cada vez, y establecer el intervalo en infinito no desperdiciará ni generará ciclos adicionales de CPU.

En este ejemplo, el valor this.RestartTimeout indica cuánto tiempo hasta que se this.RestartTimeout el primer "tick" del temporizador después de reanudar, utilizo 0 normalmente.

En mi uso específico, normalmente cambio el tiempo y el período del temporizador, luego detengo el temporizador como la primera línea de su devolución de llamada, hago funcionar el temporizador y luego lo reanudo al final. Esto es para evitar la reentrada en el código de larga ejecución.

(Timeout.Infite es -1)