我如何安排C#Windows服務(wù)每天執(zhí)行一項(xiàng)任務(wù)?我有一個(gè)用C#(.NET 1.1)編寫的服務(wù),并希望它在每晚的午夜執(zhí)行一些清理操作。我必須保留服務(wù)中包含的所有代碼,那么最簡(jiǎn)單的方法是什么?使用Thread.Sleep()和檢查滾動(dòng)的時(shí)間?
3 回答

絕地?zé)o雙
TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我實(shí)現(xiàn)這一目標(biāo)的方法是使用計(jì)時(shí)器。
運(yùn)行服務(wù)器計(jì)時(shí)器,讓它每60秒檢查一次/小時(shí)。
如果它是正確的小時(shí)/分鐘,那么運(yùn)行您的過程。
實(shí)際上,我把它抽象為一個(gè)我稱之為OnceADayRunner的基類。
讓我清理一下代碼,我會(huì)在這里發(fā)布。
private void OnceADayRunnerTimer_Elapsed(object sender, ElapsedEventArgs e) { using (NDC.Push(GetType().Name)) { try { log.DebugFormat("Checking if it's time to process at: {0}", e.SignalTime); log.DebugFormat("IsTestMode: {0}", IsTestMode); if ((e.SignalTime.Minute == MinuteToCheck && e.SignalTime.Hour == HourToCheck) || IsTestMode) { log.InfoFormat("Processing at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute); OnceADayTimer.Enabled = false; OnceADayMethod(); OnceADayTimer.Enabled = true; IsTestMode = false; } else { log.DebugFormat("Not correct time at: Hour = {0} - Minute = {1}", e.SignalTime.Hour, e.SignalTime.Minute); } } catch (Exception ex) { OnceADayTimer.Enabled = true; log.Error(ex.ToString()); } OnceADayTimer.Start(); } }
該方法的優(yōu)點(diǎn)在于.SignalTime.Minute / Hour檢查。
那里有用于測(cè)試等的鉤子,但是這就是你的經(jīng)過時(shí)間計(jì)時(shí)器看起來(lái)像什么才能使它全部工作。
- 3 回答
- 0 關(guān)注
- 1524 瀏覽
添加回答
舉報(bào)
0/150
提交
取消