temporizador de confiança em um aplicativo de console

votos
78

Estou ciente de que em .NET , existem três tipos de temporizador (veja Comparando as classes Timer na Biblioteca de classes .NET Framework ). Eu escolhi um temporizador de rosca como os outros tipos podem derivar se o thread principal está ocupado, e eu preciso que este seja confiável.

A forma como este temporizador funciona no controle do timer é colocado em outro segmento para que ele possa sempre carrapato junto com o trabalho começar concluída no segmento pai quando não está ocupado.

O problema com este temporizador em um aplicativo de console é que, enquanto o temporizador está correndo ao longo de outro segmento do thread principal não está fazendo nada para que o aplicativo fecha.

Eu tentei adicionar um while trueloop, mas, em seguida, o segmento principal é muito ocupado quando o temporizador se apagar.

Publicado 01/08/2008 em 13:43
fonte usuário
Em outras línguas...                            


2 respostas

votos
50

Você pode usar algo como Console.ReadLine()bloquear o segmento principal, para que outras threads em segundo plano (como fios temporizador) continuará a funcionar. Você também pode usar um AutoResetEvent para bloquear a execução, então (quando você precisa), você pode chamar o método set () no objeto AutoResetEvent para liberar o segmento principal. Também garantir que a sua referência a Temporizador objeto não ir fora do escopo e lixo coletado.

Respondeu 01/08/2008 em 13:56
fonte usuário

votos
17

Considere usar um ManualResetEvent para bloquear a thread principal no final do seu processamento, e chamar Reset()nele uma vez processamento do temporizador ter terminado. Se isso é algo que precisa ser executado constantemente, considere mover isto em um processo de serviço em vez de um aplicativo console.

Respondeu 01/08/2008 em 13:55
fonte usuário

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