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

C# 實現(xiàn)定時任務(wù)的5種原生方法

admin
2025年6月2日 10:47 本文熱度 675

前言

程序猿小張最近遇到了一個難題——他需要每天早上9點自動給老板發(fā)送工作報告,就像個數(shù)字化的公雞打鳴一樣準(zhǔn)時。在C#的世界里,這樣的定時任務(wù)該怎么實現(xiàn)呢?

定時器在編程中就像你的私人助理,可以幫你按時執(zhí)行各種任務(wù):數(shù)據(jù)備份、郵件發(fā)送、緩存清理...

今天,就讓我們一起來探索C#中那些讓你成為 "時間管理大師" 的定時器吧!

1. System.Timers.Timer

System.Timers.Timer 就像一個全能型選手,它是基于服務(wù)器的定時器,精度較高,適合需要在特定時間間隔重復(fù)執(zhí)行的任務(wù),特別要說明的是,它是線程安全的。

using System;
using System.Timers;

classProgram
{
    static void Main()
    {
        var timer = new System.Timers.Timer(1000); // 1秒間隔
        timer.Elapsed += (sender, e) => 
        {
            Console.WriteLine($"定時任務(wù)執(zhí)行啦!時間:{e.SignalTime}");
        };
        timer.AutoReset = true// 設(shè)置為重復(fù)觸發(fā)
        timer.Start();
        
        Console.WriteLine("按任意鍵退出...");
        Console.ReadKey();
        timer.Stop();
    }
}

2. System.Threading.Timer

System.Threading.Timer 是一個輕量級的定時器,它性能更好,沒有UI組件依賴,適合后臺任務(wù),不過在使用時,一定要記得手動釋放資源。

using System;
using System.Threading;

classProgram
{
    static void Main()
    {
        // 參數(shù):回調(diào)方法, 狀態(tài)對象, 延遲時間, 間隔時間
        var timer = new Timer(state => 
        {
            Console.WriteLine($"線程定時器觸發(fā)!時間:{DateTime.Now}");
        }, null10002000); // 1秒后開始,每2秒觸發(fā)
        
        Console.WriteLine("按任意鍵退出...");
        Console.ReadKey();
        timer.Dispose(); // 記得釋放資源
    }
}

3. System.Windows.Forms.Timer

這是一個專為 Windows Forms 設(shè)計的定時器,事件在 UI 線程上觸發(fā),可以直接操作 UI 控件,非常適合用于更新用戶界面元素,不過,它的精度較低(約55ms),不太適合高精度定時。

using System;
using System.Windows.Forms;

classProgram
{
    static void Main()
    {
        var form = new Form();
        var timer = new Timer { Interval = 1000 }; // 1秒間隔
        
        timer.Tick += (sender, e) =>
        {
            Console.WriteLine($"窗體定時器觸發(fā)!時間:{DateTime.Now}");
        };
        
        timer.Start();
        Application.Run(form);
    }
}

4. Stopwatch

Stopwatch 通常用來測量程序的執(zhí)行時間,它的精度非常高,達(dá)到微秒級,所以換一個思路,也可以把它作為定時器,比如下面這個例子:

using System;
using System.Diagnostics;
using System.Threading;

classProgram
{
    static void Main()
    {
        var stopwatch = new Stopwatch();
        stopwatch.Start();
        
        while (true)
        {
            if (stopwatch.ElapsedMilliseconds >= 1000)
            {
                Console.WriteLine($"高精度計時!時間:{DateTime.Now}");
                stopwatch.Restart();
            }
            Thread.Sleep(10); // 降低CPU占用
        }
    }
}

5. Thread.Sleep 和 Task.Delay

有時候,我們只需要簡單的延遲執(zhí)行某些代碼,這時候可以使用 Thread.Sleep(同步)或 Task.Delay(異步) 來實現(xiàn),如:

using System;
using System.Threading.Tasks;

public class AsyncAwaitExample
{
    public static async Task Main(string[] args)
    {
        Console.WriteLine("開始計時...");
        await Task.Delay(5000); // 等待5秒
        Console.WriteLine("5秒后...");
    }
}

總結(jié)

現(xiàn)在你已經(jīng)掌握了 C# 定時器的“十八般武藝”,是時候做個總結(jié)了!

  • 簡單任務(wù):System.Threading.Timer/Task.Delay(Thread.Sleep)
  • 簡單任務(wù)且高精度:Stopwatch
  • UI相關(guān):Windows.Forms.Timer
  • 服務(wù)器應(yīng)用:System.Timers.Timer

現(xiàn)在,去用代碼馴服時間吧!


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

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲日韩国产线路一 | 日韩视频一区二区 | 亚洲福利网入口久久 | 亚洲日韩小视频在线观看 | 五月婷婷免费视频 | 久久人人爽爽人人爽人人片AV |