.NET - Таймер прошедшего события перекрывается - PullRequest
2 голосов
/ 21 декабря 2010

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

Ответы [ 3 ]

1 голос
/ 21 декабря 2010

Если вы хотите запустить следующий цикл после , текущий текущий завершен, остановите таймер, если он достигнет события тика, и перезапустите его, если вы закончили.

Timer fires Tick-Event
    Disable/Stop Timer
    Program logic goes here
    Restart Timer
1 голос
/ 21 декабря 2010

Если вы хотите, чтобы ваши события таймера происходили на отметке 200 мс, и просто пропустите одно (а не откладывайте их), если предыдущий все еще работает, вы можете использовать код блокировки.

Если вы используете метод Monitor.TryEnter тогда он вернет логическое значение, сообщающее вам, получил ли он блокировку (и, следовательно, если другой поток уже находится в заблокированном коде).Это позволит вам просто пропустить и дождаться следующего запуска, если вы хотите (или выписать отладочные сообщения с жалобами на то, что это занимает слишком много времени или что-то в этом роде).

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

0 голосов
/ 21 декабря 2010

Взгляните на использование Timer.Stop Method

...