2012-07-16 50 views
3

我想寫一個Windows服務。但它需要在特定時間運行。例如,我的服務應每5分鐘給我發一封電子郵件。如何讓我的Windows服務以特定間隔運行?

private Timer _timer; 
private DateTime _lastRun = DateTime.Now; 

protected override void OnStart(string[] args) 
{ 
    _timer = new Timer(10 * 60 * 1000); // every 10 minutes 
    _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); 
    //... 
} 


private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) 
{ 
    // ignore the time, just compare the date 
    if (_lastRun.Date < DateTime.Now.Date) 
    { 
     // stop the timer while we are running the cleanup task 
     _timer.Stop(); 
     // 
     // do cleanup stuff 
     // 
     _lastRun = DateTime.Now; 
     _timer.Start(); 
    } 
} 

我希望我的服務每5分鐘給我發一封電子郵件。

+0

我不認爲這是足夠的信息是誠實的。真的很難提供任何有用的代碼。 [試試這個](http://stackoverflow.com/questions/503564/how-might-i-schedule-ac-sharp-windows-service-to-perform-a-task-daily) – yoonsi 2012-07-16 08:53:33

+0

這個問題已被問到,在這裏是鏈接。 您使用此System.Threading.Timer這是成功的關鍵 http://stackoverflow.com/questions/246697/windows-service-and-timer – IamStalker 2012-07-16 08:55:43

+0

我想給我發郵件,ı編輯我的問題 – 2012-07-16 08:55:52

回答

5

那麼我已經看到另一個問題,討論windows service vs scheduled taskthis。所以,你可能想看看那個以外這裏是2個,它可能會幫助類似的問題:

這裏也有一些偉大的鏈接:

+0

我編輯的問題是錯的?我在哪裏寫'發送郵件代碼'? – 2012-07-16 10:25:08

1

爲什麼不只是添加一個計時器到您的服務誰做你想要在你配置的時間間隔?

1

你可能想在你的服務使用類似Quartz.net運行它。然後,您可以使用cron表達式在您的服務中安排「作業」。

1

你的代碼看起來不錯,但你是否在OnStart期間首先打電話給timer.start()?

2

看看Quartz.NET或搜索 「Windows任務調度」。

第一種方法是編程式,後面是配置。

1

如果你需要一個計時器做的操作,那麼你有兩個選擇

  1. 創建一個Windows服務,並實現某種調度。這可能很複雜,因此要做好準備,以便您花費大量時間解決已解決的問題。
  2. 您可以設置調度您的應用程序的計劃任務。

這一切都取決於您真正需要多少控制。

0

對於上述功能,您可以使用控制檯應用程序與Windows調度程序的組合。

安排你的exe每5分鐘執行一次。你的exe會通過電子郵件發送給你有什麼具體的你想通過Windows服務實現嗎?

相關問題