我是quartz.net的新手。我想构建一个基于窗口的简单应用程序来安排任务。假设我有4个任务,它的开始和结束时间 实施例
Breakfast ; 8:00;8:30
Lunch;13:00;13:30
dinner;19:30;20:00
现在我希望当我在上午8点点击按钮时,会出现一个带有文字“早餐开始!!!”的消息框。在上午8:30再次出现一个消息框,文本显示为“早餐结束!!!”等等。
我经历过tutorial。但是混淆了如何继续。任何人都可以帮助我吗?
修改
是否可以使用一个作业和一个触发器?
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
for (int i = 0; i < listBox1.Items.Count; i++)
{
string[] strArr = Regex.Split(listBox1.Items[i].ToString(), @";", RegexOptions.Multiline);
// define the job and tie it to our HelloJob class
IJobDetail jobStart = JobBuilder.Create<HelloJob>()
.WithIdentity("job" + i, "group1") // name "myJob", group "group1"
.StoreDurably()
.UsingJobData("jobSays", strArr[0].ToUpper().Trim() + " " + "starts")
.Build();
string[] ArrStart = strArr[1].Trim().Split(':');
ITrigger triggerstart = TriggerBuilder.Create()
.WithIdentity("trigger" + i, "group1")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(Convert.ToInt32(ArrStart[0]), Convert.ToInt32(ArrStart[1])))
// .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.ForJob(jobStart)
.Build();
// .WithSchedule(CronScheduleBuilder.CronSchedule("0 4 06 1/1 * ? *"))
// Tell quartz to schedule the job using our trigger
scheduler.ScheduleJob(jobStart, triggerstart);
scheduler.Start();
string[] Arrend = strArr[2].Trim().Split(':');
IJobDetail jobend = JobBuilder.Create<HelloJob>()
.WithIdentity("job1" + i, "group1")
.StoreDurably()
.UsingJobData("jobSays", strArr[0].ToUpper().Trim() + " " + "end")
.Build();
ITrigger triggerend = TriggerBuilder.Create()
.WithIdentity("trigger1" + i, "group1")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(Convert.ToInt32(Arrend[0]), Convert.ToInt32(Arrend[1])))
// .WithSimpleSchedule(x => x.WithMisfireHandlingInstructionIgnoreMisfires()
.ForJob(jobend)
.Build();
scheduler.ScheduleJob(jobend, triggerend);
scheduler.Start();
}
}
catch (SchedulerException se)
{
Console.WriteLine("Scheduler Exception : " + se);
}
}
public class HelloJob : IJob
{
public void Execute(IJobExecutionContext context)
{
JobKey key = context.JobDetail.Key;
JobDataMap dataMap = context.JobDetail.JobDataMap;
string jobSays = dataMap.GetString("jobSays");
MessageBox.Show(jobSays);
}
}
答案 0 :(得分:0)
您可以按如下方式安排作业,并使用以下简单示例:
IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler();
IJobDetail job = JobBuilder.Create<MealAlertJob>()
.WithIdentity("mealJob", "mealJobGroup")
.Build();
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("breakfastStartTrigger", "mealTriggerGroup")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 0))
.ForJob(job)
.Build();
ITrigger trigger1 = TriggerBuilder.Create()
.WithIdentity("breakfastEndTrigger", "mealTriggerGroup")
.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(8, 30))
.ForJob(job)
.Build();
scheduler.ScheduleJob(job, trigger);
scheduler.ScheduleJob(trigger1);
scheduler.Start();
你应该在你的工作班中实施你的逻辑(让我们说一个消息框)&#34;执行&#34;方法。 为您的作业定义多个触发器会导致多次执行。在工作班中,例如&#34; MealAlertJob&#34;您可以检查时间并根据它显示警报。 在上面的例子中,您可以为其他四次添加更多触发器(午餐开始/结束和晚餐开始/结束)。
public class MealAlertJob : IJob
{
public void Execute(IJobExecutionContext context)
{
var now = DateTime.Now;
var hour = now.Hour;
var minute = now.Minute;
if (hour == 8 && minute == 0)
System.Windows.Forms.MessageBox.Show("Breakfast started!!!");
//and so on....
}
}
或类似的东西。