C# 使用Unschedulejob修改触发器详细信息-我做错了什么?(Quartz.NET)
我正在为我正在创建的系统使用Quartz.NET,其中作业通过Windows服务运行,并且可以在ASP.NET页面中添加和编辑(包括触发器详细信息) 但是我遇到了一些问题-我需要能够修改触发器的详细信息,例如simpletrigger或cronexpression的类型,并且有人告诉我需要取消作业计划,然后重新计划它。问题是,由于某种原因,先取消作业计划,然后再重新计划是完全删除作业中的触发器。以下是我在编辑页面上单击“提交”按钮时的代码:C# 使用Unschedulejob修改触发器详细信息-我做错了什么?(Quartz.NET),c#,asp.net,quartz-scheduler,quartz.net,C#,Asp.net,Quartz Scheduler,Quartz.net,我正在为我正在创建的系统使用Quartz.NET,其中作业通过Windows服务运行,并且可以在ASP.NET页面中添加和编辑(包括触发器详细信息) 但是我遇到了一些问题-我需要能够修改触发器的详细信息,例如simpletrigger或cronexpression的类型,并且有人告诉我需要取消作业计划,然后重新计划它。问题是,由于某种原因,先取消作业计划,然后再重新计划是完全删除作业中的触发器。以下是我在编辑页面上单击“提交”按钮时的代码: Trigger[] triggers = sched
Trigger[] triggers = sched.GetTriggersOfJob(hdnID.Value, hdnGroupID.Value);
if (ddlScheduleType.SelectedIndex == 1)
{
sched.UnscheduleJob(triggers[0].Name, triggers[0].Group);
foreach (SimpleTrigger trigger in triggers.OfType<SimpleTrigger>())
{
if (ddlInterval.SelectedIndex == 0)
{
trigger.RepeatInterval = TimeSpan.Parse("00:00:01");
}
else if (ddlInterval.SelectedIndex == 1)
{
trigger.RepeatInterval = TimeSpan.Parse("00:01:00");
}
else if (ddlInterval.SelectedIndex == 2)
{
trigger.RepeatInterval = TimeSpan.Parse("01:00:00");
}
sched.RescheduleJob(trigger.Name, trigger.Group, trigger);
}
}
else
{
foreach (CronTrigger trigger in triggers.OfType<CronTrigger>())
{
trigger.CronExpressionString = txtCron.Text;
sched.UnscheduleJob(triggers[0].Name, triggers[0].Group);
sched.RescheduleJob(trigger.Name, trigger.Group, trigger);
}
}
sched.AddJob(jobDetail, true);
Trigger[]triggers=sched.GetTriggersOfJob(hdnID.Value,hdnGroupID.Value);
如果(ddlScheduleType.SelectedIndex==1)
{
sched.UnscheduleJob(触发器[0]。名称,触发器[0]。组);
foreach(triggers.OfType()中的SimpleTrigger触发器)
{
如果(ddlInterval.SelectedIndex==0)
{
trigger.RepeatInterval=TimeSpan.Parse(“00:00:01”);
}
else if(ddlInterval.SelectedIndex==1)
{
trigger.RepeatInterval=TimeSpan.Parse(“00:01:00”);
}
else if(ddlInterval.SelectedIndex==2)
{
trigger.RepeatInterval=TimeSpan.Parse(“01:00:00”);
}
sched.RescheduleJob(trigger.Name、trigger.Group、trigger);
}
}
其他的
{
foreach(triggers.OfType()中的CronTrigger触发器)
{
trigger.CronExpressionString=txtCron.Text;
sched.UnscheduleJob(触发器[0]。名称,触发器[0]。组);
sched.RescheduleJob(trigger.Name、trigger.Group、trigger);
}
}
sched.AddJob(jobDetail,true);
你知道为什么这样不行吗?谢谢
新的:
if(ddlScheduleType.SelectedIndex==1)
{
foreach(triggers.OfType()中的SimpleTrigger触发器)
{
Trigger newtrigger=new SimpleTrigger();
如果(ddlInterval.SelectedIndex==0)
{
newtrigger=TriggerUtils.MakeSecondlyTrigger();
}
else if(ddlInterval.SelectedIndex==1)
{
newtrigger=TriggerUtils.MakeMinutelyTrigger();
}
else if(ddlInterval.SelectedIndex==2)
{
newtrigger=TriggerUtils.MakeHourlyTrigger();
}
newtrigger.Name=触发器[0]。名称;
newtrigger.Group=触发器[0]。组;
newtrigger.JobName=触发器[0]。JobName;
newtrigger.JobGroup=触发器[0]。作业组;
sched.RescheduleJob(trigger.Name、trigger.Group、newtrigger);
}
}
其他的
{
foreach(triggers.OfType()中的CronTrigger触发器)
{
CronTrigger newtrigger2=新的CronTrigger();
newtrigger2.Name=trigger.Name;
newtrigger2.Group=trigger.Group;
newtrigger2.JobName=trigger.JobName;
newtrigger2.JobGroup=trigger.JobGroup;
newtrigger2.CronExpressionString=txtCron.Text;
sched.RescheduleJob(trigger.Name、trigger.Group、newtrigger2);
}
}
- 我怀疑没有计划的工作是必要的。应该重新安排,所以不要尝试
- 您的
代码没有意义:else
foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) { trigger.CronExpressionString = txtCron.Text; sched.UnscheduleJob(triggers[0].Name, triggers[0].Group); sched.RescheduleJob(trigger.Name, trigger.Group, trigger); }
你是说也许吧foreach(triggers.OfType()中的CronTrigger触发器) { trigger.CronExpressionString=txtCron.Text; sched.UnscheduleJob(触发器[0]。名称,触发器[0]。组); sched.RescheduleJob(trigger.Name、trigger.Group、trigger); }
foreach (CronTrigger trigger in triggers.OfType<CronTrigger>()) { trigger.CronExpressionString = txtCron.Text; sched.UnscheduleJob(trigger.Name, trigger.Group); //I would remove this sched.RescheduleJob(trigger.Name, trigger.Group, trigger); }
foreach(triggers.OfType()中的CronTrigger触发器) { trigger.CronExpressionString=txtCron.Text; sched.UnscheduleJob(trigger.Name,trigger.Group);//我会删除这个 sched.RescheduleJob(trigger.Name、trigger.Group、trigger); }
- 最后,我会尝试用一个新的触发器重新安排时间,而不是修改旧的触发器
foreach(触发器中的SimpleTrigger trigger.OfType
时,您只会在SimpleTrigger上循环。如果要更改所有触发器,请尝试foreach(触发器中的触发器)
(注意,我放弃了OfType()调用)
foreach (CronTrigger trigger in triggers.OfType<CronTrigger>())
{
trigger.CronExpressionString = txtCron.Text;
sched.UnscheduleJob(trigger.Name, trigger.Group); //I would remove this
sched.RescheduleJob(trigger.Name, trigger.Group, trigger);
}