代码之家  ›  专栏  ›  技术社区  ›  Greg

Quartz.net-我不能向JobExecutionContext添加回调委托方法吗?

  •  0
  • Greg  · 技术社区  · 15 年前

    背景 -我的主窗体类中有一个同步功能。当用户按下同步按钮时,它会被手动调用。我还想在调度程序触发时调用这个同步函数,所以实际上希望schedulerjob:ijob.execute()方法能够调用它。

    问题 -如何从schedulerjob:ijob.execute()方法中访问mainform.sytronization()方法?

    我尝试在主窗体类中为该方法创建委托,并通过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以更新进度(例如,哪些将显示在主窗体的进度栏中),那么我将如何安排这样做?.NET BackgroundWorker控件 有一种方法可以做到这一点,但是如何使用quartz.net呢?