2012-04-17 67 views
1

我現在有一項服務,現在我相信每10分鐘運行一次,但是我希望它每天晚上7點運行,我需要改變什麼? ...如何在特定時間運行服務?

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) 
    { 

     if (_lastRun.Date < DateTime.Now.Date) 
     { 
      // stop the timer 
      _timer.Stop();    

      try 
      { 
       SmartImportService.WebService.WebServiceSoapClient test = new WebService.WebServiceSoapClient(); 
       test.Import(); 
      } 
      catch (Exception ex) { } 

      _lastRun = DateTime.Now; 
      _timer.Start(); 
     } 
    } 
+4

爲什麼你使用這個服務呢?將其設置爲計劃任務。 – 2012-04-17 15:59:45

+2

所以你採取了接受的答案在http://stackoverflow.com/questions/503564/how-might-i-schedule-ac-sharp-windows-service-to-perform-a-task-daily並將其粘貼到一個一個新的問題,而不是在下面看到最讚的答案。 – Till 2012-04-17 16:05:52

+0

@Till多麼聰明;) – karry 2013-02-06 15:35:47

回答

1

更換:

if (_lastRun.Date < DateTime.Now.Date) 
{ 
} 

有:

DateTime startAt = DateTime.Today.AddHours(19); 
if (_lastRun < startAt && DateTime.Now >= startAt) 
{ 
} 

可能會做的伎倆。但我寧願使用已經建議的計劃任務

+0

這樣做有史以來7小時呢?不是每天晚上7點? – Beginner 2012-04-17 16:10:09

+0

@Beginner:其實它每天早上7點都做了,但我現在改變了它。請注意'DateTime.Today'在0小時獲得當前日期,然後我們增加19個小時使其在晚上7點進行比較。之後我們檢查兩件事情。首先,如果自計劃時間以來沒有運行。然後,我們確保預定的時間在過去 – musefan 2012-04-17 16:20:42