最近在寫一個導入工具時用到了一個新的東西Quartz 計時器 ,timer有的Quartz 基本都有,所以用Quartz 來寫了下代碼,並記錄。 1、首先需要引用GuGet程式包,搜索' quartz ' ,下載安裝到程式。 2、直接上代碼,創建job,trigger等方法 job傳參: job.J ...
最近在寫一個導入工具時用到了一個新的東西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供你學習!!