2012-10-12 38 views
0

我希望每次每小時都會發生一次事件發生在系統時鐘中。例如,我在早上7:45運行我的程序,然後應該在上午8:00提高事件,而不是在上午8:45。 在上午8:00事件發生後,此事件應在每個小時上午9:00,上午10:00,上午11:00等提出......要在系統時鐘中每小時發出一次事件已經過系統時鐘

任何人都可以幫助我展示一些代碼... 我使用C#.net等提前 謝謝...

UPDATE:

現在,我得到了我的問題的簡單解決方案。因此我想分享這個解決方案。 lboshuizen的回答已經正確。我的回答與lboshuizen的回答相同,但更詳細和準確。

首先它需要使用定時器。計時器基本上以毫秒爲基礎工作,有時需要額外的計算。因此,我想首先實現毫秒到分鐘格式化功能。

int CalculateMillisecondUntilNextHour() 
{ 
    int REMAIN_MINUTE = 60 - DateTime.Now.Minute; 
    DateTime now = DateTime.Now; 
    DateTime nexthour = now.AddMinutes((minute)).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1); 

    TimeSpan interval = nexthour - now; 
    return (int)interval.TotalMilliseconds; 
} 

void CheckEachHourPassed() 
{ 
    System.Windows.Forms.Timer t = new System.Windows.Forms.Timer(); 
    t.Interval = CalculateMillisecondUntilNextHour(); 
    t.Tick += new EventHandler(t_Tick); 
    t.Enabled = true; 
} 

void t_Tick(object sender, EventArgs e) 
{ 
    MessageBox.Show("Raise Your Event"); 
    t.Interval = CalculateTimerInterval(REMAIN_MINUTE); 
} 

在這裏,主要工作函數是CheckEachHourPassed()。在你想啓動你的事件調度器的地方調用這個函數。

+0

谷歌會告訴你肯定 – Pavenhimself

+0

@daveL,沒什麼,很明顯 – lboshuizen

+0

你試過了什麼?你見過[this](http://stackoverflow.com/questions/4122509/is-there-an-event-that-fires-at-a-specific-time)? – MilkyWayJoe

回答

0

僞代碼(實現留作鍛鍊; Tibial讀者

var currentTime = Time.Now() 
var deltaMinutes = Calculate_minutes_till_next_full_hour(currentTime); 
wait(deltaMinutes); 
var timer = new timer(); 
timer.Every().Minutes(60).Execute(() => Code()); 
+0

先生,我真的很感謝你的回答。但我認爲,如果你知道確切的答案,你應該給出答案,而不是給予練習。什麼事情,你的僞代碼可以給我的想法,謝謝。 –

0

的問題是,

timer.Every().Minutes(60).Execute(() => Code()); 
隨着時間的推移,

實際上可能會與實時不同步。

如何在一個線程

var lastMoment = DateTime.Now; 
while(true) 
    if(DateTime.Now.Hour != lastMoment.Hour) 
    { 
     //Raise ElaspedHourEvent 
     //Thread.Sleep(1000); 
    ] 

運行這一點,可能不會觸發事件,直到最多一秒鐘小時後,但至少它不會得到不同步。

相關問題