Quartz 计时器使用之 给主线程窗体控件赋值方法

最近在写一个导入工具时用到了一个新的东西Quartz 计时器 ,timer有的Quartz 基本都有,所以用Quartz 来写了下代码,并记录。

1、首先需要引用GuGet程序包,搜索' quartz ' ,下载安装到程序。

2、直接上代码,创建job,trigger等方法

job传参:  job.JobDataMap.Put("AutoImport", formInstance);   ,我这里'AutoImport' 是一个主窗体的实例

  // 1.创建scheduler的引用
                ISchedulerFactory schedFact = new StdSchedulerFactory();
                sched = await schedFact.GetScheduler();
                //2.启动 scheduler
                await sched.Start();
                // 3.创建 job
                IJobDetail job = JobBuilder.Create<DoWork>()
                        .WithIdentity("job5", "group5")
                        .Build();
                job.JobDataMap.Put("AutoImport", formInstance);    //job传参

                //   4.创建 trigger
                ITrigger trigger = TriggerBuilder.Create()
                      .WithIdentity("trigger5", "group5")
                      .StartAt(DateTime.Parse(startime))
                      .WithSimpleSchedule(x => x
                        .WithIntervalInMinutes(int.Parse(jiange))     //下次执行时间的 时间
                        .RepeatForever())               //永远执行
                        .Build();

                // 5.使用trigger规划执行任务job
                await sched.ScheduleJob(job, trigger);

 

3、执行job里的方法,获取job传来的主窗体实例,通过实例修改控件的值。

   public class DoWork : IJob
        {
            public virtual async Task Execute(IJobExecutionContext context)
            {
                AutoImport au = (AutoImport)context.JobDetail.JobDataMap.Get("AutoImport");  //获取job传来的参数
          //修改主窗体中控件的值
         au.datetime_startime.Value = DateTime.Parse(nexttime);   
         au.lab_msg.Text = "等待下次启动时间..." + nexttime;
          await Task.CompletedTask;
       }
    }

这样就解决了修改主窗体控件值的问题了。

有关 Quartz 的其他方法,兄弟儿们可以自行百度啦,大把大把的资料demo供你学习!!

 

posted @ 2020-05-15 11:28  EndlessLearning  阅读(401)  评论(0编辑  收藏  举报