91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

一、System.Threading.Timer

1秒后首次觸發,之后每2秒觸發一次

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

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

無事件機制,通過回調函數觸發。

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

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

二、 System.Timers.Timer

間隔1秒執行一次

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

每天23點59分59秒執行一次任務

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) => {//執行你的任務代碼 Console.WriteLine($"{DateTime.Now} 執行每日任務");
//下一次執行時間 timer.Interval = TimeSpan.FromDays(1).TotalMilliseconds; }; timer.Start(); }}

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

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

可綁定到 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線程創建

默認Interval為1秒更新

MVVM模式需實現INotifyPropertyChanged接口

兩種實現方式各有適用場景,MVVM更適合復雜業務

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

四、using System.Threading.Tasks;

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

支持 async/await 語法糖

提供任務取消(CancellationToken)

支持任務延續(ContinueWith)

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

?與DispatcherTimer的區別?:

Tasks 是通用的異步編程模型

DispatcherTimer 專為UI線程定時器設計

Tasks 不自動關聯UI線程上下文


閱讀原文:原文鏈接


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

主站蜘蛛池模板: 日本高清不卡二区 | 91密臀在线播放 | 不卡影视 | 午夜成人鲁丝片韩国 | 国产在线观看码高 | 国语自产偷 | 日韩高清在线二区 | 3d漫画在线观看 | 国产在线精品50页 | 日韩一本之道一 | 国产对白刺激视频 | 国内在线视频观看 | 日韩成人欧美在线 | 国产精品视频色怕怕 | 欧美在线视频第一页 | 91视频一区在线 | 欧美亚洲精品在线 | 中文字幕资源网 | 国产精品主播视频 | 成人影视免| 中文字幕在线免费 | 福利在线播放 | 日本全部一级视频 | 尤物国产视频 | 日韩在线精品一区 | 日本aⅴ在线观看 | 日韩免费高清一级三 | 拍91精品| 片完整片视频在线 | 福利狠高清免费 | 清纯大学| 日韩一级大片亚洲 | 欧美影院一区 | 成人性欧美| 97人人澡 | 日韩卡1 | 国产有码一级 | 成人午夜 | 日韩国产欧美视频 | 欧美日韩国产第1 | 成人国产一区不卡 |