2020-05-15

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

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供你学习!!

 


No comments:

Post a Comment