2012-04-17 66 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