Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在c#net中每天早上执行一个方法_C#_Multithreading_.net 4.0_Console Application - Fatal编程技术网

如何在c#net中每天早上执行一个方法

如何在c#net中每天早上执行一个方法,c#,multithreading,.net-4.0,console-application,C#,Multithreading,.net 4.0,Console Application,我想写一段代码,每天早上06:00触发一个方法Processmethod,不知怎么的,我写了下面的代码,但它不是泛型的。我怎样才能让它在早上06:00开始,代码更少 while(true) { Thread.sleep(Timespan.FromHours(11)) Processmethod(); } 您必须为此实现计划程序任务。有许多DLL可用于执行此任务。例如,您可以使用Quartz.Net。首先,创建要执行的作业- public class EmailJob : IJ

我想写一段代码,每天早上06:00触发一个方法
Processmethod
,不知怎么的,我写了下面的代码,但它不是泛型的。我怎样才能让它在早上06:00开始,代码更少

while(true) {
    Thread.sleep(Timespan.FromHours(11))
    Processmethod();
}

您必须为此实现计划程序任务。有许多DLL可用于执行此任务。例如,您可以使用Quartz.Net。首先,创建要执行的作业-

 public class EmailJob : IJob
{
    public void Execute(IJobExecutionContext context)
    {
       // implement your method here

    }
}
现在将此作业指定给调度程序-

   public class JobScheduler
{
    public static void Start()
    {
        IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
        scheduler.Start();

        IJobDetail job = JobBuilder.Create<EmailJob>().Build();

        ITrigger trigger = TriggerBuilder.Create()
            .WithDailyTimeIntervalSchedule
              (s =>
                 s.WithIntervalInHours(24)
                .OnEveryDay()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
              )
            .Build();

        scheduler.ScheduleJob(job, trigger);
    }
}
公共类作业调度器
{
公共静态void Start()
{
isScheduler scheduler=StdSchedulerFactory.GetDefaultScheduler();
scheduler.Start();
IJobDetail job=JobBuilder.Create().Build();
ITrigger trigger=TriggerBuilder.Create()
.使用DailyTimeIntervals时间表
(s=>
s、 间隔小时(24)
.每天一次
.StartingDailyAt(一天的时间、小时和分钟(0,0))
)
.Build();
ScheduleJob(作业,触发器);
}
}

现在指定
JobScheduler.Start()在应用程序中\u从全局启动。您可以尽快尝试以下代码

while(true)
{
    if(DateTime.Now.Hour == 6 && DateTime.Now.Minute == 0)
       Processmethod();
    else
       Thread.Sleep(1000)
}

不,这与我现在的工作方式不同,对我来说,它必须每天早上6:00开始\n我使用windows Scheduler来执行此操作,但主要问题是有时它会使中间exe处于打开状态。我需要一种类似于did@peter您不应该为此使用Thread.sleep。因为它会在该时间段内阻止线程,并将资源分配给该线程,这可能对应用程序非常有害。其次,您可以指定线程睡眠的持续时间,而不是特定的时间戳。我将创建一个窗口服务,它将使用logiconly线程。睡眠(1000)?我想我必须让它保持24小时的睡眠时间,我建议它睡眠一秒钟(1000毫秒),然后检查情况,看看是否是早上6点。一旦它变成06:00 am,该函数将被调用。我认为这比让它睡24小时更有意义,因为如果你真的叫睡眠(24小时),你可能会错过早上6点。除非你一直调用sleep直到6岁,否则执行这个函数,然后调用sleep 24小时。我对你有意义吗?