Как остановить таймер при отладке - PullRequest
9 голосов
/ 06 марта 2012

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

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

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

Ответы [ 2 ]

11 голосов
/ 06 марта 2012

Если вы хотите, вы можете заключить это в директиву #if DEBUG или использовать System.Diagnostic.Debugger.IsAttached

4 голосов
/ 06 марта 2012

В вашем 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
    }
...