我在WPF应用程序中使用System.Timers.Timer.我想了解在计算机休眠和睡眠之后Timer的行为方式.计算机从休眠状态恢复后,我的应用程序出现了一些奇怪的问题.
我应该如何处理计时器,以及它们在计算机处于休眠/睡眠模式时的行为方式?
我有一个午夜计时器,应该每个午夜工作以重置UI上的默认值.
以下是创建计时器的代码:
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();
}
Run Code Online (Sandbox Code Playgroud)
在UI页面的构造函数中,我调用调用ResestMidnightTimer()的方法并在事实上创建计时器.之后,计时器只等了一夜.
当夜间(实际上是12:01 AM)到来时,计时器工作,按预期重置默认值,然后处理现有计时器.最后它为第二天创建了一个新的午夜计时器.但是如果我在那天尝试休眠计算机,午夜计时器将无法工作,也不会重置默认值.
那是因为虽然冬眠它只是将事件处理推迟了相同的时间才被冬眠了吗?