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