Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.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# 使用Unschedulejob修改触发器详细信息-我做错了什么?(Quartz.NET)_C#_Asp.net_Quartz Scheduler_Quartz.net - Fatal编程技术网

C# 使用Unschedulejob修改触发器详细信息-我做错了什么?(Quartz.NET)

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

我正在为我正在创建的系统使用Quartz.NET,其中作业通过Windows服务运行,并且可以在ASP.NET页面中添加和编辑(包括触发器详细信息)

但是我遇到了一些问题-我需要能够修改触发器的详细信息,例如simpletrigger或cronexpression的类型,并且有人告诉我需要取消作业计划,然后重新计划它。问题是,由于某种原因,先取消作业计划,然后再重新计划是完全删除作业中的触发器。以下是我在编辑页面上单击“提交”按钮时的代码:

 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);
    }
    
  • 最后,我会尝试用一个新的触发器重新安排时间,而不是修改旧的触发器


干杯,伙计,这很好-但是如果我想将SimpleTrigger更改为CronTrigger,它似乎不起作用,它只是保留了旧的SimpleTrigger。你可以发布用CronTrigger替换SimpleTrigger的代码吗?你的新代码不会将SimpleTrigger更改为CronTriggers。在一种情况下,它将SimpleTrigger更改为SimpleTrigger。在另一种情况下,它会将CronTriggers更改为其他CronTriggers。嗯,我需要能够删除其他触发器吗?我该怎么做?对不起,我听起来很笨,我最近脑子有毛病了!例如,当您编写
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);
    }