背景 - 我的MainForm类中有一个同步功能。它在用户按下SYNC按钮时被手动调用。我也想在调度器触发时调用这个同步功能,所以有效地希望SchedulerJob:IJob.Execute()方法能够调用它。quartz.net - 我可以不向JobExecutionContext添加回调委托方法吗?
问题 - 如何从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 - 真正坚持在这里 - 任何帮助,欢迎
另一种方式来提出我的问题是:如果我希望我的工作能够定期回来打电话到主UI要更新进度(例如哪些将显示在MainForm的进度条中),那么我将如何安排这样做? NET backgroundworker控件 有办法做到这一点,但我怎么会这样做使用Quartz.net?