最近在写一个导入工具时用到了一个新的东西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供你学习!!