2016-01-26 55 views
0

運行任務每天在特定的時間我想一個任務文件(.exe)以8:55將跨越日常運行在30 miniutue.so我創建了一個控制檯應用程序將啓動任務(.exe)的使用process.start()。我不想sheduler或windowservice,而我很高興與控制檯application.But在控制檯應用程序中使用的邏輯有時失敗即沒有調用文件(.exe)的任務。我通過使用while(true)創建無限循環。我張貼下來的代碼(控制檯代碼),如何糾正它如何在不使用sheduler或windowservice

while (true) 
      { 
       if (DateTime.Now.Hour == 8 & DateTime.Now.Minute == 55 && DateTime.Now.Second == 0) 
       { 
        Process.Start(".exe");//not real code 
       } 
       else 
        Thread.Sleep(1000); 
      } 

編輯 我需要通過在白天使用控制檯應用程序,沒有比這更只有一次運行任務

+0

可能的重複[如何在C#中每天調用方法?](http://stackoverflow.com/questions/3243348/how-to-call-a-method-daily- at-specific-time-in-c) – Nikola

+0

你錯過了第二個標記。 – Maritim

+0

@Nikola它不是重複,我已經編輯我的問題 – peter

回答

1
 while (true) 
     { 
      var now = DateTime.Now; 
      var schedule = new DateTime(now.Year, now.Month, now.Day, 8, 55, 00); 
      if (schedule < now) schedule = schedule.AddDays(1); 

      Thread.Sleep(schedule.Subtract(now)); 

      Process.Start(".exe"); 
     } 
+0

有問題。只有在if內啓動exe。 –

+1

@Tobias Knauss,再想一想。此代碼每天只能運行一次。沒有必要如果。 – serhiyb

+0

需要檢查這個 – peter

2

因爲您的情況缺少秒。 Thread.Sleep(1000)不能保證它在每秒爲0時會被準確暫停,所以你需要比這更聰明。

+0

我該如何擺脫? – peter

+0

第一個最明顯的方法 - 檢查當前時間是否等於或大於早上8點55分,然後開始該過程。 –

+0

@peter:使用Thread.Sleep(500) –

相關問題