2013-02-19 56 views
1

我有幾個定時功能,運行Windows服務:窗口服務計時器設置爲每週

_timer = new Timer(1 * 60 * 1000); // every 1 minute 
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
    _timer.Start(); 
    _fbtimer = new System.Timers.Timer(48 * 60 * 60 * 1000); 
    _fbtimer.Elapsed += new System.Timers.ElapsedEventHandler(fbtimer_Elapsed); 
    _fbtimer.Start(); 
    //Weekley Snapshot 
    _ventimer = new System.Timers.Timer(2 * 60 * 1000); 
    _ventimer.Elapsed += new System.Timers.ElapsedEventHandler(ventimer_Elapsed); 
    _ventimer.Start(); 
    //Weekly Activity 
    _tevtimer = new System.Timers.Timer(2 * 60 * 1000); 
    _tevtimer.Elapsed += new System.Timers.ElapsedEventHandler(tevtimer_Elapsed); 
    _tevtimer.Start(); 

如何設置要發生的計時器說一週一次,甚至更好的將其設置爲一個特定的時間每週一天,不使用quatrz/windows調度程序或太不同的方法。

增加:這就是我如何在10

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    //log.Info("Info - Check time"); 
    DateTime startAt = DateTime.Today.AddHours(10); 
    if (_lastRun < startAt && DateTime.Now >= startAt) 
    { 
     _timer.Stop(); 
     //Stuff 
     _lastRun = DateTime.Now; 
     _timer.Start(); 
    } 
} 
+1

「不使用quatrz/windows調度程序」。 **壞主意** – AgentFire 2013-02-19 09:25:46

+0

確定任何建議最好/簡單的方法來實現石英在這種方法,因爲我已經嘗試過沒有運氣 – Beginner 2013-02-19 09:27:02

+0

如果你改變'AddHours(10)'爲'AddDays(7)'你有答案你自己的問題。 – 2013-02-19 09:28:43

回答

3

運行的日常任務,而無需使用quatrz/Windows計劃或太大的不同方法。

爲什麼重新發明輪子,很差?無論如何,每週計時器不會有太大的好處。如果您將計時器編碼爲等待一週,並且該計算機在本週中途重新啓動以進行更新,該怎麼辦?計時器將再次開始等待一週。

你最好讓它運行一個小的時間間隔,並檢查每次是否該運行你想要的方法。這樣您可以預先計算'事件時間'並每次檢查它。

+0

原因是我曾嘗試實施石英,並沒有發現它直接前進。也許你可以告訴我最好的方法,請做什麼?我試着在網站上下面的教程 – Beginner 2013-02-19 09:23:21

+1

@Beginner我認爲CodeCaster意味着你設置了一個小時計時器,它檢查一個DateTime變量,它存儲例程應運行的下一個日期和時間。如果日期和時間過去,請運行該方法並更新下一次運行的DateTime變量。 – 2013-02-19 09:26:48

+0

有點像我正在做我的第一個計時器?請參閱添加到問題 – Beginner 2013-02-19 09:28:39