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