防止Quartz.Net事件的立即触发

3

当我创建一个简单的触发器并将其分配给调度程序时,它会立即触发,然后再按照预定的时间间隔触发。如何使其仅在指定时间触发?

以下是示例代码:

// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();

// get a scheduler
IScheduler sched = schedFact.GetScheduler();            

// construct job info
JobDetail jobDetail = new JobDetail("myJob", "Default", typeof(DumbJob));

// Example trigger to fire after 1 minute, no repeat
Trigger trigger = TriggerUtils.MakeMinutelyTrigger(1, 0);

// Schedule the job
trigger.Name = "demoTrigger";
sched.ScheduleJob(jobDetail, trigger);                       

sched.Start();  

public class DumbJob : IJob
{
   public DumbJob()
   {
   }

    public void Execute(JobExecutionContext context)
    {
        MessageBox.Show("Dumb job is running");
    }
}
1个回答

1

触发器对象有一个StartTimeUtc属性,您可以使用它来指定触发器何时开始触发等。以下是一个示例:

     trigger.StartTimeUtc = TriggerUtils.GetEvenMinuteDate(DateTime.Now.AddMinutes(1));

这将创建一个触发器,它将在下一分钟开始触发。


谢谢ryudice,非常好用...注意我不得不将它改为DateTime.NowUTC,因为所有时间都是UTC时间。 - ServerMonkey
有人知道如何在Quartz.NET 2.0+中实现这个吗?- 在最新版本中,StartTimeUtc没有setter。 - SpaceBison
DateAdd(DateInterval.Minute, item.reoccurring, DateTime.UtcNow) 对我来说更好用。TriggerUtils.GetEvenMinuteDate会将分钟四舍五入。 - highwingers
@SpaceBison,它被称为.StartAt(),您将在触发器调用.Build()之前使用它。 - buddybubble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接