LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C#常用的定時任務幾種方式

admin
2025年6月16日 23:53 本文熱度 424

一、System.Threading.Timer

1秒后首次觸發(fā),之后每2秒觸發(fā)一次

using System.Threading;
class Program{    static void Main()    {        // 創(chuàng)建定時器(回調(diào)函數(shù),狀態(tài)對象,初始延遲,間隔)        var timer = new Timer(            callback: state => Console.WriteLine($"觸發(fā)時間: {DateTime.Now:T}"),            state: null,            dueTime: 1000,    // 1秒后首次觸發(fā)            period: 2000       // 之后每2秒觸發(fā)一次        );
        Console.ReadLine();        timer.Dispose(); // 釋放資源    }}

輕量級,基于線程池,適合高性能后臺任務。

無事件機制,通過回調(diào)函數(shù)觸發(fā)。

手動控制 啟動/停止(通過 Change 方法)。

不直接支持 UI 操作(需手動切換線程)。

二、 System.Timers.Timer

間隔1秒執(zhí)行一次

using System.Timers;
class Program{    static void Main()    {        var timer = new System.Timers.Timer(interval: 1000); // 1秒間隔        timer.Elapsed += (sender, e) => Console.WriteLine($"觸發(fā)時間: {e.SignalTime:T}");        timer.AutoReset = true// 是否循環(huán)觸發(fā)        timer.Start();
        Console.ReadLine();        timer.Stop();    }}

每天23點59分59秒執(zhí)行一次任務

using System.Timers;
class DailyTask{        static Timer timer;        static void Main() { SetTimer(); Console.WriteLine("定時服務已啟動..."); }
       static void SetTimer() {          var now = DateTime.Now;          var target = new DateTime(now.Year, now.Month, now.Day, 235959);          if (now > target) target = target.AddDays(1);
timer = new Timer((target - now).TotalMilliseconds); timer.Elapsed += (s,e) => {//執(zhí)行你的任務代碼 Console.WriteLine($"{DateTime.Now} 執(zhí)行每日任務");
//下一次執(zhí)行時間 timer.Interval = TimeSpan.FromDays(1).TotalMilliseconds; }; timer.Start(); }}

基于事件(Elapsed 事件),代碼更易讀。

支持自動重置(AutoReset 屬性控制是否循環(huán))。

可綁定到 UI 線程(通過 SynchronizingObject,僅 WinForms)。

適合需要事件機制的場景(如 UI 定時更新)。

三、using System.Windows.Threading

using System.Windows.Threading;
public partial class MainWindow : Window {    private DispatcherTimer _timer;    public MainWindow() {        InitializeComponent();        _timer = new DispatcherTimer();        _timer.Interval = TimeSpan.FromSeconds(1);        _timer.Tick += (s, e) => lblTime.Content = DateTime.Now.ToString("HH:mm:ss");        _timer.Start();    }}

DispatcherTimer必須在UI線程創(chuàng)建

默認Interval為1秒更新

MVVM模式需實現(xiàn)INotifyPropertyChanged接口

兩種實現(xiàn)方式各有適用場景,MVVM更適合復雜業(yè)務

注意避免直接在其他線程修改UI元素,這是選擇DispatcherTimer而非System.Timers.Timer的主要原因。如需動態(tài)調(diào)整間隔時間,可通過修改Interval屬性實現(xiàn)

四、using System.Threading.Tasks;

using System.Threading.Tasks;
public void UploadTimer(){ Task.Run(async () => {while (IsTurnOnOk) {try {//執(zhí)行任務 Test();
//間隔5秒await Task.Delay(5000); }catch (Exception ex) { } } });}

支持 async/await 語法糖

提供任務取消(CancellationToken)

支持任務延續(xù)(ContinueWith)

并行任務處理(Task.WhenAll/WhenAny)

?與DispatcherTimer的區(qū)別?:

Tasks 是通用的異步編程模型

DispatcherTimer 專為UI線程定時器設計

Tasks 不自動關聯(lián)UI線程上下文


閱讀原文:原文鏈接


該文章在 2025/6/17 13:49:24 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關報表等業(yè)務管理,結合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲欧美精品综合在线观看 | 久久亚洲一区二区 | 亚洲欧美另类久久久精品能播放的 | 在线日本妇人成熟免费a√ 亚洲乱码精品不卡 | 亚洲国产精品欧美激情 | 日本午夜精品理论片a级 |