14

Timers 名前空間の Timer を使用しています。PC がスリープ状態または休止状態になると、タイマーはどうなりますか?

タイマーを 6 時間の遅延に設定しています。

それらの状況で何が起こるでしょうか。

1) タイマーは 0 時に開始し、すぐにスリープ/休止状態になります。その後、PC は 5 時間に起動します。タイマーは次の 1 時間後または次の 6 時間後に作動しますか?

2) タイマーは 0 時に開始し、すぐにスリープ/休止状態になります。その後、PC は 7 時に起動します。タイマーは、PC が起動するとすぐに起動しますか?それとも、その 1 回を「逃して」次の 5 時間後に起動しますか? 次のイベントまでカウントを開始するのは、PC のウェイク時ですか、それとも以前の「見逃した」イベントからですか?

4

1 に答える 1

28

Ok。私は友人に尋ねたところ、これが彼の結果です。

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));
        }
    }
}

要するに。スリープおよびウェイク タイマーの後に、イベントを逃したかどうかをチェックします。1 つも逃した場合は、0 から次のイベントまでカウントを開始します。

于 2013-02-11T22:27:25.653 に答える