2012-03-05 3 views
7

Итак, я настраиваю System.Timers.Timer и получаю обработчик для события Elapsed. Он работает так, как ожидалось.Как остановить таймер при отладке

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

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

ответ

7

, если вы хотите, вы можете обернуть это в #if DEBUG directive или вы можете использовать System.Diagnostic.Debugger.IsAttached

+0

+1 - Для свойства Debugger.IsAttached. Думаю, мне это нравится лучше, чем #if. – Dunk

+0

, если честно: это зависит от того, чего вы хотите достичь - с #if, у вас вообще нет кода в вашей версии релиза, где другой вариант будет неиспользуемым кодом. – Carsten

3

В обработчике Timer.Elapsed событий, может быть, вы можете использовать некоторые директивы препроцессора, чтобы включить код, который останавливается и начинается (или отключает и включает) таймер:

private static void OnTimedEvent(object source, ElapsedEventArgs e) 
    { 
#if DEBUG 
     (source as Timer).Stop(); 
     // or 
     (source as Timer).Enabled = false; 
#endif 

     // do your work 

#if DEBUG 
     (source as Timer).Start(); 
     // or 
     (source as Timer).Enabled = true; 
#endif 
    } 
+0

У меня есть Stop and Start как временное обходное решение. Я не являюсь поклонником директив препроцессора. Но если это единственный способ, которым я могу воспользоваться. – Dunk

Смежные вопросы