Я использую system.timer в службе Windows для запуска процесса, который обычно превышает интервал таймера. Я стараюсь, чтобы таймер не запускал один и тот же код более одного раза, известная проблема с system.timers.Как приостановить использование System.Timer в Visual Basic?
Что я хочу: таймер запускает мой код, но таймер «приостанавливается», чтобы дождаться завершения кода до возобновления тиков.
У меня есть две проблемы:
Работа путь system.timers является то, что таймер будет создавать условия гонки на вас, запустив новые избыточные темы того же кода и складывали их на вас, если не завершено к моменту истечения интервала таймера.
Я бы начал/остановил таймер, чтобы это не происходило, но с помощью System.Timers.Timer, как только вы остановите таймер для завершения обработки, он никогда не возвращается - я никогда не мог перезапустить таймер, как только он был остановлен, он был уничтожен и, вероятно, собран. Включение/выключение - это то же самое, что и start/stop с одинаковыми результатами.
Как на земле вы держите system.timer от запуска новых избыточных нитей того же кода, если этот процесс не будет завершен к тому времени, интервал таймера включения истекла? Очевидно, что запуск/остановка (включение/выключение) таймера НЕ является решением, поскольку оно не работает.
Помощь!
Попытка с помощью [Threading.Timer] (https://msdn.microsoft.com/en-us/library/system.threading.timer (v = vs.110) .aspx). Установите время цикла в бесконечность и только запустите таймер по методу обратного вызова –