在WinForms中的使用FluentScheduler實現定時任務

 

在WinForm程序中使用 FluentScheduler框架實現一個多任務的定時執行功能。

 

1、使用Nuget 安裝 FluentScheduler 包,默認使用最新穩定版

2、以下是 實現功能的代碼:

 1 using System;
 2 using System.Windows.Forms;
 3 using FluentScheduler;
 4 
 5 public partial class MainForm : Form
 6 {
 7     public MainForm()
 8     {
 9         InitializeComponent();
10         JobManager.Initialize(new MyRegistry(Query));
11     }
12 
13     public void Query()
14     {
15         // 這裏實現Query方法的內容
16     }
17 
18     protected override void OnFormClosing(FormClosingEventArgs e)
19     {
20         // 確保在窗體關閉時停止並清理FluentScheduler的任務
21         JobManager.StopAndBlock(); 
22         base.OnFormClosing(e);
23     }
24 
25     private class MyRegistry : Registry
26     {
27         public MyRegistry(Action queryAction)
28         {
29             // 創建每週一至週五6點5分執行的任務
30             Schedule(() =>
31             {
32                 if (Application.OpenForms.Count > 0)
33                 {
34                     Form mainForm = Application.OpenForms[0]; // 獲取主窗體
35                     if (mainForm.InvokeRequired)
36                     {
37                         mainForm.Invoke(queryAction); // 通過委託在UI線程上執行Query()
38                     }
39                     else
40                     {
41                         queryAction(); // 直接執行Query()
42                     }
43                 }
44             }).ToRunEvery(1).Weeks().OnWeekdays().At(6, 5);
45         }
46     }
47 }
48 
49 // 程序入口
50 static class Program
51 {
52     [STAThread]
53     static void Main()
54     {
55         Application.EnableVisualStyles();
56         Application.SetCompatibleTextRenderingDefault(false);
57         Application.Run(new MainForm());
58     }
59 }

 

使用框架的特點:

1、將定時任務的邏輯與UI邏輯分離。不直接從調度器線程更新UI,而是通過更新UI的方法來處理。

2、只在需要時創建新的委託(Action),避免重複創建委託,這在頻繁觸發的任務中尤其重要。

3、確保應用程序關閉時正確地清理資源。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章