在安排Quartz.NET作业详细信息后对其进行修改

时间:2010-10-22 20:51:45

标签: c# asp.net quartz-scheduler quartz.net

我有一个Quartz.NET应用程序,我需要管理员能够修改作业详细信息 - 主要是每个作业数据图中的信息,还有触发器之类的东西 - 这是我正在使用的代码

   protected void ButtonSubmit_Click(object sender, EventArgs e)
    {
        JobDetail jobDetail = sched.GetJobDetail(hdnID.Value, hdnGroupID.Value);
        jobDetail.JobDataMap["idname"] = txtName.Text;
        jobDetail.JobDataMap["initialPath"] = TextBox1.Text;
        jobDetail.JobDataMap["targetPath"] = TextBox2.Text;
        jobDetail.JobDataMap["regex"] = TextBox3.Text;
        jobDetail.JobDataMap["overrideemails"] = txtEmails.Text;
        jobDetail.JobDataMap["flush"] = chkflush.Checked;
        jobDetail.JobDataMap["impUsername"] = txtImpUsername.Text;
        jobDetail.JobDataMap["impDomain"] = txtImpDomain.Text;
        jobDetail.JobDataMap["impPassword"] = txtImpPassword.Text;
        Trigger[] triggers = sched.GetTriggersOfJob(hdnID.Value, hdnGroupID.Value);

        if (ddlScheduleType.SelectedIndex == 0)
        {
            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("00:00:01");
                }
            }
        }

        else
        {
            foreach (CronTrigger trigger in triggers.OfType<CronTrigger>())
            {
                trigger.CronExpressionString = txtCron.Text;

            }
        }


    }

(我知道我对foreach循环所做的事情是愚蠢的,但是只有一个触发器有一个作业,这是我在这里收到的一段代码。)

问题是,页面回发正常,新值仍保留在文本框中。但是,当我再次查看工作时,根本没有任何变化。我究竟做错了什么?由于根本没有错误,这很令人困惑。

请注意,隐藏字段也已正确设置。

由于

当我调试程序时,ButtonSubmit_Click事件肯定正在运行,程序会经历这个过程。

1 个答案:

答案 0 :(得分:1)

通过调用sched.GetTriggersOfJobsched.GetJobDetail获得的实例是真实触发器/作业的克隆。 在重新安排更改的触发器或使用更改的触发器添加更改的作业之前,调度程序不会使用对这些对象的更改。

如果您只更改了触发器,我认为您应该可以使用RescheduleJob,并且可以remove原始触发器和add新触发器。