背景- 我的 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 做到这一点?