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

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

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

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

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

1.08.2008 12:43:11
2 ОТВЕТА
РЕШЕНИЕ

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

58
24.12.2019 10:19:21

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

19
24.12.2019 11:07:38