使用quartz.net 完成一個winform版的任務提醒工具

HelloLLLLL發表於2021-03-14

這個任務提醒工具是這樣的,是每日定時執行,觸發時間為 小時和分鐘。每天早上來就可以把當天要做的新增到datagridview中,只記錄了標題和內容和時間。雙擊dgv就檢視內容。

如果每天計劃重複,也可已儲存計劃,使用json序列化儲存,然後載入任務的時候,選擇檔案載入,比較任務的時間如果小於當前的年月日,就把年月日替換為當前的,小時和分鐘時間保留。

點選了執行任務之後,就用quartz.net的api,支援多個任務提醒。

刪除任務也會把計劃裡的job刪除掉的。

 

寫這個也是突發奇想,也算是小小的瞭解了一下定時任務的用法了。

這個定時任務 有幾個物件比較重要:Schedule、IJob、 Triggler。

IJob就是你要執行的任務,裡面有個方法,用來執行任務的,這個方法有個引數,任務上下文,可以把需要執行的資料通過這個上下文物件傳遞的執行方法裡來執行。

觸發器就是定義任務在什麼時候,任務的執行頻次 的資料,這個任務和觸發器是要關聯起來,統一交給 schedule管理。

詳細的,等我需要深入瞭解的時候在去學吧。

執行的程式碼:

隱藏

  1.    IDictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>> jobAndTriger = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
  2.  
  3.  
  4.    foreach (var p in listP)
  5.    {
  6.        var name = p.Ptime.ToString("yyyyMMddHHmmssff");
  7.        int hour = p.Ptime.Hour;
  8.        int m = p.Ptime.Minute;
  9.  
  10.        var job = JobBuilder.Create<Plan>()
  11.       .WithIdentity(name, "group1") // name "myJob", group "group1"
  12.       .Build();
  13.        job.JobDataMap.Add(name, p);
  14.  
  15.        ITrigger t = TriggerBuilder.Create()
  16. .WithIdentity("myTrigger"+ name)
  17. .ForJob(name)
  18. .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour,m)) // execute job daily at 9:30
  19. .ModifiedByCalendar("PlanDay") // but not on holidays
  20. .Build();
  21.  
  22.        Quartz.Collection.ISet<ITrigger> set =new Quartz.Collection.HashSet<ITrigger>();
  23.        set.Add(t);
  24.        jobAndTriger.Add(job, set);
  25.    }

窗體之間資料傳遞資料,用了事件。

隱藏

  1. public class Plan:IJob
  2.     {
  3.         public DateTime Ptime { get; set; }
  4.  
  5.         public string PTitle { get; set; }
  6.         public string pDetail { get; set; }
  7.         public bool PIsFinish { get; set; }
  8.  
  9.        public event Action<Plan> action;
  10.  
  11.         public void Execute(IJobExecutionContext context)
  12.         {
  13.             var val = context.JobDetail.JobDataMap.Values;
  14.             foreach (var item in val)
  15.             {
  16.                 ((Plan)item).action?.Invoke((Plan)item);
  17.             }
  18.  
  19.         }
  20.     }

如果感興趣可以下載原始碼:

連結:https://pan.baidu.com/s/1y1ijav_7HfrjQXSu57DtCQ

提取碼:1234

複製這段內容後開啟百度網盤手機App,操作更方便哦--來自百度網盤超級會員V3的分享

相關文章