2012-04-17 10 views
1

Iveは現在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

なぜこれはまったくサービスを使用していますか?スケジュールされたタスクとして設定します。 –

+2

あなたは受け入れられた答えをhttp://stackoverflow.com/questions/503564/how-might-i-schedule-ac-sharp-windows-service-to-perform-a-task-dailyで受け取り、それをそれより下の最も上のアップボックスを使って答えを見るのではなく、新しい質問。 – Till

+0

@Till Howスマート;) – karry

答えて

1

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

はおそらく、トリックを行います。しかし、私はすでに提案されているように、スケジュールされたタスクを使用することを好むでしょう

+0

これはこれまで7時間かかりますか?毎晩午後7時ではない? – Beginner

+0

@Beginner:実際は毎日午前7時にそれをやりましたが、今は変更しました。 'DateTime.Today'は現在の日付を0時間に取得し、19時間を追加して比較のために7pmにすることに注意してください。それ以降、2つのことを確認します。まず、スケジュール時刻以降に実行されていない場合。そして、スケジュールされた時間が過去であることを確認します – musefan

1

Windowsサービスは継続的に実行されているタスクです。特定の時間に実行する必要のあるものを探している場合は、Scheduled TaskOther good linkと書いてください。

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

をして:交換

関連する問題