如何在不使用sheduler或windowservice的情况下每天在特定时间运行任务

时间:2016-01-26 17:42:38

标签: c# .net multithreading console-application

我想要一个任务(.exe)每天早上8:55运行,这将超过30个miniutue.so我创建了一个控制台应用程序,它将使用process.start()启动该任务(.exe)。我我不喜欢sheduler或windowservice,而是对控制台应用程序很满意。但是控制台应用程序中使用的逻辑有时会失败,即不调用任务(.exe)。我使用while(true)创建无限循环。我发布的代码(控制台代码),如何纠正

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);
            }

修改  我需要使用控制台应用程序只运行一次任务,而不是一天中的任务

2 个答案:

答案 0 :(得分:2)

因为您的病情缺失了几秒钟。 Thread.Sleep(1000)不保证当每秒为0时它会被准确暂停,所以你需要比这更聪明。

答案 1 :(得分: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");
        }