2013-02-11 8 views
8

私はタイマーの名前空間からタイマーを使用しています。 PCがスリープ状態または休止状態になると、タイマーはどうなりますか?スタンバイモードでは何が起きますか?

私はタイマーを6時間遅れに設定しています。

これらの状況ではどうなりますか。

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

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

+0

これはあなた自身で簡単にテストできます。それを試して、回答を投稿してください。 –

+0

5分で試したときの結果は何ですか?それとも、まだ試していないのですか? – I4V

+0

@HansPassant私は私の質問の懇願で私は今それをテストすることができないと言った。 – Hooch

答えて

19

私は私の友人に尋ねた、これは彼のresutlsです:

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から次のイベントまでカウントを開始します。

+3

-1質問のために+1答え。 – I4V

+2

@ I4Vなぜ-1?これは良い質問です、そして、誰も正しい答えを知らないので、Hoochはそれ自身をチェックしました。すばらしいです!彼は私の時間を救った) –

関連する問題