14

我正在使用来自 Timers 命名空间的 Timer。当 PC 进入睡眠或休眠状态时,计时器会发生什么?

我将计时器设置为延迟 6 小时。

在这些情况下会发生什么。

1) 定时器从 0 小时开始并立即进入睡眠/休眠状态。然后 PC 在 5 小时唤醒。我的计时器会在接下来的 1 小时后还是在接下来的 6 小时后触发?

2) 定时器从 0 小时开始并立即进入睡眠/休眠状态。然后 PC 在 7 小时唤醒。我的计时器会在 PC 唤醒后立即启动,还是会“错过”一次并在接下来的 5 小时内启动?它会从 PC 唤醒或从之前的“错过”事件开始计数到下一个事件吗?

4

1 回答 1

28

行。我问了我的朋友,这是他的结果:

23:21:32 : Timer started
23:21:35 : PC Goes Sleep
23:22:50 : PC Wakes
23:22:50 : Timer fired
23:23:50 : Timer fired

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace Test
{
    class Program
    {
        static System.Timers.Timer timer;

        static void Main(string[] args)
        {
            timer = new System.Timers.Timer();
            timer.Interval = 60 * 1000;
            timer.AutoReset = true;
            timer.Elapsed += timer_Elapsed;
            timer.Enabled = true;

            Console.WriteLine(String.Format("{0}:{1}:{2} : Timer started", DateTime.Now.ToLocalTime().Hour, DateTime.Now.ToLocalTime().Minute, DateTime.Now.ToLocalTime().Second));

            timer.Start();

            Thread.Sleep(Timeout.Infinite);
        }

        static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            Console.WriteLine(String.Format("{0}:{1}:{2} : Timer fired", DateTime.Now.ToLocalTime().Hour, DateTime.Now.ToLocalTime().Minute, DateTime.Now.ToLocalTime().Second));
        }
    }
}

所以简而言之。睡眠和唤醒计时器后检查它是否错过了任何事件。如果它错过了一个,它将触发从 0 开始计数直到下一个事件。

于 2013-02-11T22:27:25.653 回答