【问题标题】:Quartz.Net retrieve object from scheduler before stopping itQuartz.Net 在停止之前从调度程序中检索对象
【发布时间】:2014-01-01 23:34:24
【问题描述】:

我正在开发一个使用 Quartz Scheduler 的 C# 项目。在这个项目中有一个简单的表格。在这个表单上有一个按钮,我用它来创建调度程序和触发器,然后开始工作。

private void startBtn_Click(object sender, EventArgs e)
{
    IScheduler firstScheduler = new StdSchedulerFactory().GetScheduler();
    firstScheduler.Start();

    IJobDetail jobDetail = JobBuilder.Create<AcquireLogsJob>()
    .WithIdentity("acquireLogsJobId", "acquireLogsGroupId")
    .Build();
    jobDetail.JobDataMap.Add("reader", readerToUse);

    ITrigger trigger = TriggerBuilder.Create()
        .WithIdentity("acquireLogsTriggerId")
        .StartNow()
        .ForJob(jobDetail)
        .WithCronSchedule("0 0/" + sampleTime.Value + " * * * ?")
        .Build();

    firstScheduler.ScheduleJob(jobDetail, trigger);
}

我向工作发送了一个带有名称阅读器的参数。我用另一个按钮停止了关闭调度程序的工作。

private void stopBtn_Click(object sender, EventArgs e)
{
    if (firstScheduler != null)
    {
        firstScheduler.Shutdown(true);
    }
}

虽然我传递给 jobdetail 的参数需要关闭,但我的需要是:或者在关闭调度程序之前,我想检索我传递给作业的对象读取器,或者作业通知关闭并关闭它读者。 我怎么能这样做?谢谢

【问题讨论】:

  • 我建议您在 stopBtn_Click 中关闭阅读器,因为无论如何您似乎都有它的实例变量。要么完全控制工作的打开和关闭,要么在外面处理。

标签: c# quartz-scheduler quartz.net


【解决方案1】:

在 Shutdown(true) 方法之前。

检索所有工作并找到您放置阅读器的工作

定义SchedulerListener类实现ISchedulerListenr接口

在 SchedulerShuttingdown() 方法中检索作业

【讨论】:

    【解决方案2】:

    感谢回复,我按照SchedulerListener的方式实现ISchedulerListener接口,然后我把我的调度器添加到监听器中

    scheduler.ListenerManager.AddSchedulerListener(mySchedListener);
    

    一切正常。

    :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      相关资源
      最近更新 更多