2013-02-11 112 views
8

我使用Timer來自Timers命名空間。 當PC進入睡眠或休眠狀態時,計時器會發生什麼?待機模式下的計時器會發生什麼?

我有計時器設置爲6小時的延遲。

在這些情況下會發生什麼。

1)計時器從小時0開始,立即進入睡眠/休眠狀態。然後PC在5小時後喚醒。我的計時器在接下來的1小時後還是在接下來的6小時後會啓動?

2)定時器從小時0開始,立即進入睡眠/休眠狀態。然後PC在7小時後喚醒。我的計時器會在PC喚醒後立即啓動,還是會「錯過」一次,並在接下來的5小時內觸發?它是否會開始計數,直到PC喚醒或之前「錯過」事件發生時的下一個事件?

+0

這是您可以輕鬆測試的東西。嘗試它併發布答案。 – 2013-02-11 22:07:23

+0

當你嘗試5分鐘時,結果如何?或者你還沒有嘗試過呢? – I4V 2013-02-11 22:08:07

+0

@HansPassant我在提問時告訴我現在不能測試它。 – Hooch 2013-02-11 22:08:50

回答

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

因此,在短期。 睡眠和醒來後,定時器會檢查它是否錯過了任何事件。如果它錯過了,它將從0開始計數直到下一個事件。

+3

-1爲問題,但+1爲答案。 – I4V 2013-02-11 22:30:59

+2

@ I4V爲什麼-1?這是一個很好的問題,Hooch自己檢查了一下,因爲沒人知道正確的答案。大!他節省了我的時間) – 2017-08-28 16:38:55

相關問題