日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

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

C# 四種 Timer 定時(shí)器區(qū)別與用法(含代碼示例)

admin
2025年6月21日 10:17 本文熱度 91

前言

在 C# 開發(fā)中,計(jì)時(shí)器(Timer) 是實(shí)現(xiàn)定時(shí)執(zhí)行任務(wù)的重要工具。無論是執(zhí)行后臺(tái)輪詢、定時(shí)刷新數(shù)據(jù),還是控制程序節(jié)奏,Timer 都扮演著關(guān)鍵角色。然而,.NET 提供了多種不同類型的 Timer 類,各自適用于不同的場景和開發(fā)環(huán)境。

本文將詳細(xì)介紹 C# 中常用的四種 Timer 類型,包括它們的特性、工作原理、適用范圍以及使用方法,并通過完整的代碼示例幫助大家理解其區(qū)別與應(yīng)用場景。

一、System.Threading.Timer —— 線程級(jí)輕量計(jì)時(shí)器

特點(diǎn)

最底層、最輕量級(jí)的計(jì)時(shí)器;

基于線程池運(yùn)行,適用于非 UI 場景;

不是線程安全的;

對于時(shí)間精度要求不高的后臺(tái)任務(wù)非常合適。

示例代碼

string state = ".";
Timer timer = new Timer(TimeMethod, state, 1001000); // 100ms后開始,每1秒執(zhí)行一次

void TimeMethod(object state)
{
    Console.WriteLine(state.ToString());
}
// 停止并釋放計(jì)時(shí)器
timer.Dispose();

應(yīng)用場景

后臺(tái)服務(wù)中輕量級(jí)的定時(shí)任務(wù);

不需要與 UI 控件交互的任務(wù);

多線程環(huán)境中對性能敏感的小型定時(shí)操作。

?? 注意:此計(jì)時(shí)器不適合用于 WinForm 或 WPF 的 UI 操作,因?yàn)槠浠卣{(diào)函數(shù)不在主線程上執(zhí)行。

二、System.Timers.Timer —— 服務(wù)器端多線程計(jì)時(shí)器

特點(diǎn)

封裝了 System.Threading.Timer,提供了更友好的事件模型;

支持多線程環(huán)境,適合服務(wù)或 ASP.NET 應(yīng)用;

提供同步上下文設(shè)置(SynchronizingObject),避免跨線程訪問問題;

默認(rèn)自動(dòng)循環(huán)(AutoReset = true);

可能出現(xiàn)重入問題(多個(gè)線程同時(shí)進(jìn)入 Elapsed 事件)。

示例代碼

System.Timers.Timer timer = new System.Timers.Timer();
timer.Interval = 500// 設(shè)置間隔為500毫秒
timer.SynchronizingObject = this// 避免跨線程訪問UI控件的問題

timer.Elapsed += Timer_Elapsed;
timer.Start();

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("Elapsed event triggered.");
}

解決重入問題的方法

可以在 Elapsed 方法中加入鎖機(jī)制或標(biāo)志位防止多線程重復(fù)執(zhí)行:

int inTimer = 0;

private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
    if (Interlocked.Exchange(ref inTimer, 1) == 0)
    {
        try
        {
            Thread.Sleep(3000);
            Console.WriteLine($"Handling tick on thread: {Thread.CurrentThread.ManagedThreadId}");
        }
        finally
        {
            Interlocked.Exchange(ref inTimer, 0);
        }
    }
}

應(yīng)用場景

ASP.NET Web API 或后臺(tái)服務(wù)中的定時(shí)邏輯;

多線程環(huán)境下需要執(zhí)行耗時(shí)任務(wù)但需防止重入;

需要精確控制計(jì)時(shí)周期且允許異步處理的應(yīng)用。

三、System.Windows.Forms.Timer —— WinForm 專用計(jì)時(shí)器

特點(diǎn)

專為 WinForm設(shè)計(jì),運(yùn)行在 UI 主線程;

安全地與界面控件進(jìn)行交互;

精度較低(約5ms),適用于簡單定時(shí)任務(wù);

只有 Interval 和 Enabled 兩個(gè)屬性,使用簡單。

示例代碼

public partialclassForm1 : Form
{
    public Form1()
    {
        InitializeComponent();
        Load += delegate
        {
            Timer timer = new Timer();
            timer.Interval = 500;
            timer.Tick += delegate
            {
                lblTimer.Text = DateTime.Now.ToLongTimeString();
            };
            timer.Start();
        };
    }
}

結(jié)果分析

所有 Tick 時(shí)間都在主線程中執(zhí)行;

不會(huì)發(fā)生跨線程訪問異常,可直接修改控件;

不適合高頻率或高并發(fā)任務(wù)。

應(yīng)用場景

WinForm 界面中簡單的定時(shí)更新;

需要與 UI 控件聯(lián)動(dòng)的場合;

輕量級(jí)動(dòng)畫、狀態(tài)欄更新等。

四、System.Windows.Threading.DispatcherTimer —— WPF 專用計(jì)時(shí)器

特點(diǎn)

專為 WPF 設(shè)計(jì),運(yùn)行在 UI 主線程;

與 Dispatcher 隊(duì)列綁定,確保線程安全;

支持設(shè)置優(yōu)先級(jí)(DispatcherPriority);

可以精確控制 UI 更新時(shí)機(jī);

但受系統(tǒng)負(fù)載影響,可能存在延遲。

示例代碼

public partialclassMainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(1);
        timer.Tick += Timer_Tick;
        timer.Start();
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        txtTime.Text = DateTime.Now.ToString("HH:mm:ss");
    }
}

優(yōu)化建議

可以設(shè)置 DispatcherPriority 來提高響應(yīng)速度:

DispatcherTimer timer = new DispatcherTimer(DispatcherPriority.Normal);

應(yīng)用場景

WPF 界面上定時(shí)刷新內(nèi)容;

依賴 UI 線程的操作; 動(dòng)畫、倒計(jì)時(shí)等可視化組件任務(wù)。

定時(shí)器對比

總結(jié)

C# 中的四種 Timer 各具特色,適用于不同技術(shù)棧和開發(fā)場景:

  • System.Threading.Timer:輕量高效,適合后臺(tái)任務(wù);

  • System.Timers.Timer:功能豐富,適合多線程服務(wù)器開發(fā);

  • System.Windows.Forms.Timer:簡潔易用,WinForm 界面首選;

  • DispatcherTimer:WPF 環(huán)境下專屬計(jì)時(shí)器,安全可靠。

選擇合適的 Timer,不僅關(guān)系到程序的穩(wěn)定性與性能,也直接影響用戶體驗(yàn)。希望本文能幫助大家清晰掌握各個(gè) Timer 的使用方法與最佳實(shí)踐,在實(shí)際項(xiàng)目中游刃有余地應(yīng)用。


閱讀原文:原文鏈接


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

欧美三级片电影久久久| 98av日本| 国产日韩欧美午夜| 狠狠搓欧美| 日本天天久久| 超碰欧美国产日韩| 精品久久久久久中夂字幕18| 久久黄色三级| 在线 91 推油| 老年BB一区二区| 嘿嘿国产极品网站| 嗯嗯嗯…嗯啊啊视频| 色婷婷日韩精品一区二| 人妻不卡视频聊天| 欧美久久久久久久久久久性狂欢 | 亚洲午夜成人悠悠电影院| 精品 在线| 亚洲天天射天天干| 黄片免费在线观看视频| 日韩人妻无码精品综合网| 精品亚洲国产一区二区三区| 丁香五月天成人在线| 日韩一级毛一欧美一级a免费| 日韩区不卡| 欧美b日日日| 亚洲男人的天堂在线看| 日韩欧美一区国产| 日韩av手机| 骚女张开双腿让男人插视频网站| zipaitoupairhan| 国产小骚逼操逼视频| 男人色天堂ab| 色哟哟精品一区在线| 日韩主播日b片瓶塞的阴道里面| 久久精品无码国产专区| 熟妇一区二区三区| 欧美大胆激情视频一区二区| 全国99精品国产| 非洲一级片久久| 亚洲人妻二四区| 665566亚洲一区|