2010-03-26 99 views
0

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

回答