0

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

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

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

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 - 真的卡在这里 - 欢迎任何帮助

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

4

1 回答 1

0

请参阅WinForms - 如何在不传递委托的情况下从单独的线程访问/调用 UI 线程中的方法?

于 2010-03-28T23:44:07.147 回答