Надежный таймер в консольное приложение

голоса
78

Я знаю , что в .NET существует три типа таймера (см Сравнение классов таймера в библиотеке классов .NET Framework ). Я выбрал резьбовой таймера , как другие типы могут дрейфовать , если основной поток занят, и мне это нужно , чтобы быть надежным.

Путь этот таймер работает в управлении таймера помещается в другом потоке, так что всегда можно поставить галочку вместе с работой начинает завершено на родительском потоке, когда он не занят.

Проблема с этим таймером в консольном приложении является то, что в то время как таймер тикает вперед на другой поток основного поток не делает ничего, чтобы приложение закрывается.

Я попытался добавить while trueпетлю, но основной поток слишком занят , когда таймер делает гаснет.

Задан 01/08/2008 в 13:43
источник пользователем
На других языках...                            


2 ответов

голоса
50

Вы можете использовать что - то вроде Console.ReadLine()блокировать основной поток, так и другие фоновые потоки (например , резьб таймера) все еще будет работать. Вы также можете использовать AutoResetEvent блокировать выполнение, а затем (если необходимо) , вы можете вызвать метод Set () на этом объекте AutoResetEvent освободить основной поток. Кроме того , убедитесь , что ваша ссылка на объект Timer не выходит из области видимости и мусора собираются.

Ответил 01/08/2008 в 13:56
источник пользователем

голоса
17

Рассмотрите возможность использования ManualResetEvent блокировать основной поток в конце его обработки, а также позвонить Reset()по нему один раз обработка этого таймера завершена. Если это то , что нужно постоянно работать, рассмотреть вопрос о переходе этого в процесс обслуживания вместо консольного приложения.

Ответил 01/08/2008 в 13:55
источник пользователем

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