Я использую 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), таймер срабатывает, сбрасывает значения по умолчанию, как ожидалось, а затем удаляет существующий таймер. Наконец, он создает новый полуночный таймер на следующий день. Но если я попытаюсь перевести компьютер в спящий режим в течение этого дня, полуночный таймер не будет работать и не сбросит значения по умолчанию.
Это потому, что при переходе в спящий режим он просто откладывает обработку события на то же время, на которое он был спящим?