Temporizador confiable en una aplicación de consola

votos
78

Soy consciente de que en .NET hay tres tipos de temporizadores (ver Comparación de las clases de temporizador en .NET Framework Class Library ). He elegido un temporizador con rosca ya que los otros tipos pueden derivar si el hilo principal está ocupado, y necesito que esto sea confiable.

La forma en que funciona este temporizador en el control del temporizador se coloca en otro hilo, por lo que siempre puede avanzar junto con el trabajo que comienza a completarse en el hilo principal cuando no está ocupado.

El problema con este temporizador en una aplicación de consola es que mientras el temporizador avanza en otro subproceso, el subproceso principal no está haciendo nada, por lo que la aplicación se cierra.

Traté de agregar un while truebucle, pero luego el hilo principal está demasiado ocupado cuando el temporizador se apaga.

Publicado el 01/08/2008 a las 13:43
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
50

Puede usar algo así como Console.ReadLine()para bloquear el hilo principal, de modo que otros hilos de fondo (como los hilos del temporizador) sigan funcionando. También puede usar un AutoResetEvent para bloquear la ejecución, luego (cuando lo necesite) 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 quede fuera del alcance y de la basura recolectada.

Respondida el 01/08/2008 a las 13:56
fuente por usuario

votos
17

Considere usar un evento manualResetEvent para bloquear el hilo principal al final de su procesamiento, y llamarlo Reset()una vez que el procesamiento del temporizador haya finalizado. Si esto es algo que necesita ejecutarse constantemente, considere mover esto a un proceso de servicio en lugar de una aplicación de consola.

Respondida el 01/08/2008 a las 13:55
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more