0

我有一个 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 事件肯定在工作,因为我已经调试了程序并且程序通过了它。

4

1 回答 1

1

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

我认为如果您只更改触发器并且可以删除原始触发器并添加一个新触发器,您应该能够使用RescheduleJob 。

于 2011-01-31T11:07:01.403 回答