在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、確保應用程序關閉時正確地清理資源。