Как System.Timers.Timer ведет себя в приложении WPF после гибернации и сна?

Я использую System.Timers.Timer в своем приложении WPF. Я хочу понять, как таймер ведет себя после того, как компьютер переведен в спящий режим. У меня возникают странные проблемы с моим приложением после выхода компьютера из спящего режима.

Как мне обрабатывать таймеры и как они себя ведут, когда компьютер находится в спящем / спящем режиме?

У меня есть полуночный таймер, который должен срабатывать каждую полночь для сброса значений по умолчанию в пользовательском интерфейсе.

Вот код, который создает таймер:

private void ResetMidnightTimer() 
        { 
            // kill the old timer
            DisposeMidnightTimer();

            _midnightTimer = new Timer();
            // scheduling the timer to elapse 1 minute after midnight
            _midnightTimer.Interval = (DateTime.Today.AddDays(1).AddMinutes(1) - DateTime.Now).TotalMilliseconds;
            _midnightTimer.Elapsed += (_, __) => UpdateRecommendedCollectingTime();
            _midnightTimer.Enabled = true;
            _midnightTimer.Start();
        }

В конструкторе страницы пользовательского интерфейса я вызываю метод, который вызывает ResestMidnightTimer () и фактически создает таймер. После этого таймер просто ждет ночи.

Когда наступает ночное время (на самом деле это 12:01), таймер срабатывает, сбрасывает значения по умолчанию, как ожидалось, а затем удаляет существующий таймер. Наконец, он создает новый полуночный таймер на следующий день. Но если я попытаюсь перевести компьютер в спящий режим в течение этого дня, полуночный таймер не будет работать и не сбросит значения по умолчанию.

Это потому, что при переходе в спящий режим он просто откладывает обработку события на то же время, на которое он был спящим?

22
задан docmanhattan 7 December 2011 в 17:40
поделиться