quartz.net - 我可以不向JobExecutionContext添加回调委托方法吗?

时间:2010-03-26 06:18:51

标签: quartz.net

背景 - 我的MainForm类中有一个同步功能。当用户按下SYNC按钮时,它会被手动调用。我也想在调度程序触发时调用此同步函数,因此有效地希望SchedulerJob:IJob.Execute()方法能够调用它。

问题 - 如何从SchedulerJob:IJob.Execute()方法中访问MainForm.Sychronization()方法?

我尝试在MainForm类中为此方法创建一个委托,并通过jobDetail.JobDataMap添加它。但是,当我尝试时,我不确定JobDataMap是否有一个方法来提取委托类型???

private void Schedule(MainForm.SyncDelegate _syncNow)
{
    var jobDetail = new JobDetail("MainJob", null, typeof(SchedulerJob));
    jobDetail.JobDataMap["CallbackMethod"] = _syncNow;

    // Trigger Setup
    var trigger = new CronTrigger("MainTrigger");
    string expression = GetCronExpression();
    trigger.CronExpressionString = expression;
    trigger.StartTimeUtc = DateTime.Now.ToUniversalTime();

    // Schedule Job & Trigger 
    _scheduler.ScheduleJob(jobDetail, trigger);
}


public class SchedulerJob : IJob
{
    public SchedulerJob()
    {
    }

    public void Execute(JobExecutionContext context)
    {
        JobDataMap dataMap = context.JobDetail.JobDataMap;
        MainForm.SyncDelegate CallbackFunction = dataMap.getDelegate["CallbackMethod"];  
           **// THIS METHOD DOESN'T EXIST - getDelegate()**
        CallbackFunction();

    }
}

PS.bump - 真的卡在这里 - 欢迎任何帮助

提出我的问题的另一种方法是:如果我希望我的Job能够定期回调主UI以更新进度(例如,哪些将显示在MainForm的进度条中),那么我该如何安排这样做? .NET后台工作控件 有办法做到这一点,但是如何使用Quartz.net做到这一点?