背景 - 我的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?