2010-07-29 73 views
3

我需要編寫一些定期運行的.NET代碼,以檢查數據庫表中的「未處理」項目,處理它們,然後寫回到他們被處理的數據庫。我們可能會將其設置爲每分鐘運行一次。在Windows中定期運行.NET組件的解決方案

如何在Windows Server環境中設置組件以便定期執行代碼?

回答

3

在你的windows服務中使用System.Timers.Timer

你可以在你的windows服務的OnStart事件有這樣的代碼(從MSDN):

// Hook up the Elapsed event for the timer. 
timer.Elapsed += new ElapsedEventHandler(OnTimedEvent); 

// Set the Interval to 2 seconds (2000 milliseconds). 
timer.Interval = 2000; 
timer.Enabled = true; 

........... 

// Specify what you want to happen when the Elapsed event is raised. 
private static void OnTimedEvent(object source, ElapsedEventArgs e) 
{ 
    ...... 
} 

如果,如果它每天運行也可以考慮使用Windows Task Scheduler時間間隔不頻繁的例子。它可以在給定的時間間隔內運行你的應用程序(注意如果間隔是而不是那麼頻繁)。

+0

反對的任何理由??? – Incognito 2010-07-29 19:09:45

2

Windows計劃任務(開始 - 程序 - 附件 - 系統工具)...... SSIS作業調度...第三方軟件作業(Activebatch等)...

3

通過Windows任務創建計劃任務調度。計劃的任務將定期運行您編譯的.NET EXE(我假設它是一個EXE)。如果你需要它運行時間不到一分鐘,我認爲你需要轉移到Windows服務。

以下是關於如何設置計劃任務的nice tutorial。屏幕截圖來自Windows XP。

1

您可以將其設置爲與每當你想要的(這個頻率,可能是你最好的選擇),或者你可以在Windows中設置調度計劃的任務,其熄滅計時器的服務。

如果你使用Windows服務的路線走,你的start()方法看起來像:

Timer tmr = new Timer(60000, true) //this could be wrong: set it for one minute and turn on auto-reset. 

tmr.Start(); 

然後你就會有一個事件處理程序來處理Timer的事件(不記得現在的名字是:勾號,也許?),這將調用您的實際代碼。

如果您的代碼需要一分多鐘才能完成,您可以將自動重啓設置爲false,然後在處理protion手控制回服務時重新啓用計時器。

相關問題