C# 如何在不使用Scheduler或WindowsService的情况下每天在特定时间运行任务

C# 如何在不使用Scheduler或WindowsService的情况下每天在特定时间运行任务,c#,.net,multithreading,console-application,C#,.net,Multithreading,Console Application,我想要一个任务(.exe)每天早上8:55运行,这将跨越30分钟。因此,我创建了一个控制台应用程序,它将使用process.start()启动该任务(.exe)。我不想要调度程序或Windows服务,我更喜欢控制台应用程序。但是控制台应用程序中使用的逻辑有时会失败,即没有调用任务(.exe)。我使用while(true)创建无限循环。我正在发布的代码(控制台代码),如何更正 while (true) { if (DateTime.Now.H

我想要一个任务(.exe)每天早上8:55运行,这将跨越30分钟。因此,我创建了一个控制台应用程序,它将使用
process.start()启动该任务(.exe)
。我不想要调度程序或Windows服务,我更喜欢控制台应用程序。但是控制台应用程序中使用的逻辑有时会失败,即没有调用任务(.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);
            }
编辑
我只需要使用console应用程序运行该任务一次,一天内不超过一次,因为您的情况缺少秒。Thread.Sleep(1000)不能保证它会在每秒为0时完全暂停,因此您需要比这更聪明。

因为您的情况缺少秒数。Thread.Sleep(1000)不能保证它会在每秒为0时完全暂停,因此您需要比这更聪明。

while(true)
        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");
        }
{ var now=DateTime.now; var schedule=新日期时间(现在.年,现在.月,现在.日,8,55,00); 如果(计划<现在)计划=计划添加天数(1); 线程.Sleep(schedule.Subtract(now)); Process.Start(“.exe”); }
while(true)
{
var now=DateTime.now;
var schedule=新日期时间(现在.年,现在.月,现在.日,8,55,00);
如果(计划<现在)计划=计划添加天数(1);
线程.Sleep(schedule.Subtract(now));
Process.Start(“.exe”);
}


您的可能副本缺少第二个标记。@Nikola这不是副本,我已编辑了我的question@peter,在上述问题中,有一些例子说明了如何在不使用调度程序的情况下实现这一点:)@Nikola包含一个方法,但请参见serhiyb答案,非常简单,包含的行数较少。但我必须验证它是否可能是重复的,因为您缺少第二个标记。@Nikola它不是重复的,我已编辑了我的question@peter,在上述问题中,有一些例子说明了如何在不使用调度程序的情况下实现这一点:)@Nikola包含一个方法,但请参见serhiyb答案,非常简单,包含的行数较少。但我必须验证我如何才能消除它?第一个最明显的方法是检查当前时间是否等于或大于上午8:55,然后启动进程。@TobiasKnauss这可能也不起作用,这取决于CPU有多忙以及进程将得到多少关注。你是对的,但这将大大增加机会。他还可以跳过秒数检查,并设置一个标志来记住该任务是在那天运行的。@peter您可以在变量中记住任务运行的那天,并且不会再次触发。如果您想要更大的灵活性,请查看我已多次使用它来安排日程。我如何摆脱它?第一个最明显的方法是检查当前时间是否等于或大于上午8:55,然后启动进程。@TobiasKnauss这也可能不起作用,这取决于CPU有多忙以及进程将得到多少关注。您是对的,但这将大大增加机会。他还可以跳过秒数检查,并设置一个标志来记住该任务是在那天运行的。@peter您可以在变量中记住任务运行的那天,并且不会再次触发。如果你想要更多的灵活性,我已经用过很多次了。只在if中启动exe。@Tobias Knauss,再考虑一下。此代码每天只运行一次。如果有问题,就不需要了。只在if中启动exe。@Tobias Knauss,再考虑一下。此代码每天只运行一次。如果没有必要的话。