2013-02-11 3 views
8

Я использую таймер из пространства имен Timers. Что происходит с таймером, когда компьютер переходит в спящий режим или спящий режим?Что происходит с таймером в режиме ожидания?

У меня установлен таймер на 6 часов задержки.

Что произойдет в таких ситуациях.

1) Таймер запускается в час 0 и немедленно переходит в спящий режим/спящий режим. Затем ПК просыпается в час 5. Будет ли мой таймер гореть через следующие 1 час или после следующих 6 часов?

2) Таймер запускается в час 0 и немедленно переходит в спящий режим/спящий режим. Затем ПК просыпается в час 7. Будет ли мой таймер загореться, как только компьютер просыпается или он «пропустит» один раз и выстрелит в следующие 5 часов? Будет ли он начинать отсчет до следующего события со времени пробуждения ПК или от предыдущего «пропущенного» события?

+0

Это то, что вы можете легко проверить самостоятельно. Попробуйте и отправьте ответ. –

+0

Каковы были результаты, когда вы пробовали, скажем, 5 минут. Или вы еще не пробовали? – I4V

+0

@ HansPassant Я сказал при попрошайничестве о моем вопросе, что сейчас я не могу его протестировать. – Hooch

ответ

19

Ok. я спросил своего друга, и это есть его 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

+2

@ I4V почему -1 ?? Это хороший вопрос, и Хуч проверил это сам, потому что никто не знает правильного ответа. Большой! Он спас мне время) –