c# - ejemplo - Temporizador confiable en una aplicación de consola
timer c# ejemplo (2)
Considere usar un
ManualResetEvent
para bloquear el hilo principal al final de su procesamiento, y llame a
Reset()
una vez que el procesamiento del temporizador haya finalizado.
Si esto es algo que necesita ejecutarse constantemente, considere pasar esto a un proceso de servicio en lugar de una aplicación de consola.
Soy consciente de que en .NET hay tres tipos de temporizador (consulte Comparación de las clases de temporizador en la biblioteca de clases de .NET Framework ). Elegí un temporizador roscado ya que los otros tipos pueden derivar si el hilo principal está ocupado, y necesito que esto sea confiable.
La forma en que este temporizador funciona en el control del temporizador se coloca en otro subproceso para que siempre se pueda marcar junto con el trabajo que comienza en el subproceso principal cuando no está ocupado.
El problema con este temporizador en una aplicación de consola es que mientras el temporizador avanza en otro hilo, el hilo principal no está haciendo nada para que la aplicación se cierre.
Intenté agregar un ciclo
while true
, pero luego el hilo principal está demasiado ocupado cuando el temporizador se apaga.
Puede usar algo como
Console.ReadLine()
para bloquear el hilo principal, por lo que otros hilos de fondo (como hilos de temporizador) seguirán funcionando.
También puede usar un
AutoResetEvent
para bloquear la ejecución, luego (cuando sea necesario) puede llamar al método Set () en ese objeto AutoResetEvent para liberar el hilo principal.
También asegúrese de que su referencia al objeto Timer no esté fuera del alcance y la basura recolectada.