Pergunta

Estou ciente de que em .LÍQUIDO existem três tipos de temporizador (veja Comparando as classes de timer na biblioteca de classes do .NET Framework).Eu escolhi um temporizador encadeado, pois os outros tipos podem desviar se o encadeamento principal estiver ocupado e preciso que ele seja confiável.

A forma como esse cronômetro funciona no controle do cronômetro é colocada em outro thread para que ele possa sempre marcar junto com o início do trabalho concluído no thread pai quando não estiver ocupado.

O problema com esse cronômetro em um aplicativo de console é que, enquanto o cronômetro está funcionando em outro thread, o thread principal não faz nada para fechar o aplicativo.

Eu tentei adicionar um while true loop, mas o thread principal está muito ocupado quando o cronômetro dispara.

Foi útil?

Solução

Você pode usar algo como Console.ReadLine() para bloquear o thread principal, para que outros threads de segundo plano (como threads de timer) ainda funcionem.Você também pode usar um Evento AutoReset para bloquear a execução, então (quando necessário) você pode chamar o método Set() nesse objeto AutoResetEvent para liberar o thread principal.Certifique-se também de que sua referência ao objeto Timer não saia do escopo e seja coletada como lixo.

Outras dicas

Considere usar um ManualResetEvento para bloquear o thread principal no final de seu processamento e chamar Reset() nele assim que o processamento do cronômetro terminar.Se isso for algo que precisa ser executado constantemente, considere mover isso para um processo de serviço em vez de um aplicativo de console.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top