2016-01-26 24 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) –

相关问题