Подтвердить что ты не робот

Как остановить таймер во время отладки

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

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

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

4b9b3361

Ответ 2

В вашем обработчике событий 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
    }