2010-03-26 142 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?

回答