C#定時(shí)器中的System.Timers.Timer詳解
System.Timers.Timer 是 .NET 框架中用于創(chuàng)建基于時(shí)間間隔的定時(shí)器類(lèi),它屬于 System.Timers 命名空間。這個(gè)定時(shí)器類(lèi)設(shè)計(jì)用于多線程環(huán)境中的服務(wù)器或服務(wù)組件,沒(méi)有用戶(hù)界面,在運(yùn)行時(shí)不可見(jiàn)。
核心特性
事件驅(qū)動(dòng)模型: System.Timers.Timer 通過(guò) Elapsed 事件來(lái)通知定時(shí)器已經(jīng)過(guò)了指定的時(shí)間間隔。當(dāng)定時(shí)器到達(dá)設(shè)定的時(shí)間間隔時(shí),會(huì)引發(fā) Elapsed 事件。
多線程執(zhí)行: 該定時(shí)器在 ThreadPool 線程上運(yùn)行,適用于后臺(tái)任務(wù)處理。它可以在一定時(shí)間間隔內(nèi)重復(fù)執(zhí)行任務(wù)。
自動(dòng)重置功能: 通過(guò) AutoReset 屬性控制是否重復(fù)觸發(fā)事件。當(dāng) AutoReset 設(shè)置為 true 時(shí),定時(shí)器會(huì)持續(xù)重復(fù)執(zhí)行;設(shè)置為 false 時(shí),只在第一次時(shí)間間隔后觸發(fā)一次。
主要屬性
● Interval:設(shè)置定時(shí)器觸發(fā)事件的時(shí)間間隔(單位為毫秒)
● AutoReset:控制定時(shí)器是否重復(fù)觸發(fā)事件
● Enabled:控制定時(shí)器是否啟用
使用示例

案例代碼
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using Timer = System.Timers.Timer;
namespace ConsoleTest
{
internal class Program
{
private static Timer backgroundTimer;
private static int taskCounter = 0;
private static bool isRunning = false;
static void Main(string[] args)
{
Console.WriteLine("System.Timers.Timer 使用案例");
Console.WriteLine("============================");
// 創(chuàng)建定時(shí)器,每3秒執(zhí)行一次
backgroundTimer = new Timer(3000);
backgroundTimer.Elapsed += OnTimerElapsed;
backgroundTimer.AutoReset = true;
// 啟動(dòng)定時(shí)器
backgroundTimer.Enabled = true;
isRunning = true;
Console.WriteLine("定時(shí)器已啟動(dòng),每3秒執(zhí)行一次后臺(tái)任務(wù)");
Console.WriteLine("輸入 'stop' 停止定時(shí)器,輸入 'exit' 退出程序");
while (true)
{
string input = Console.ReadLine();
if (input?.ToLower() == "stop")
{
StopTimer();
}
else if (input?.ToLower() == "exit")
{
break;
}
}
// 清理資源
StopTimer();
backgroundTimer.Dispose();
Console.WriteLine("程序結(jié)束");
}
private static void OnTimerElapsed(object source, ElapsedEventArgs e)
{
taskCounter++;
Console.WriteLine($"[后臺(tái)任務(wù) {taskCounter}] 執(zhí)行時(shí)間: {e.SignalTime:yyyy-MM-dd HH:mm:ss}");
// 模擬一些后臺(tái)工作
PerformBackgroundWork();
}
private static void PerformBackgroundWork()
{
try
{
// 模擬耗時(shí)操作
Thread.Sleep(1000);
Console.WriteLine($"[后臺(tái)任務(wù) {taskCounter}] 工作完成");
}
catch (Exception ex)
{
Console.WriteLine($"[錯(cuò)誤] 后臺(tái)任務(wù)執(zhí)行出錯(cuò): {ex.Message}");
}
}
private static void StopTimer()
{
if (isRunning)
{
backgroundTimer.Enabled = false;
isRunning = false;
Console.WriteLine("定時(shí)器已停止");
}
}
}
}與其他定時(shí)器的區(qū)別
System.Timers.Timer 與 System.Threading.Timer 和 System.Windows.Forms.Timer 相比,具有以下特點(diǎn):
● System.Timers.Timer: 定期觸發(fā)事件,類(lèi)旨在用作多線程環(huán)境中的基于服務(wù)器或服務(wù)組件;它沒(méi)有用戶(hù)界面,在運(yùn)行時(shí)不可見(jiàn)(不可以直接更新UI界面)
● System.Threading.Timer: 定期在線程池線程上執(zhí)行單個(gè)回調(diào)方法(不可以直接更新UI界面)
● System.Windows.Forms.Timer: 一種 Windows 窗體組件,按固定時(shí)間間隔觸發(fā)事件(可以直接更新UI界面)
到此這篇關(guān)于C#中定時(shí)器中的System.Timers.Timer詳解的文章就介紹到這了,更多相關(guān)C# 定時(shí)器System.Timers.Timer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘二 線性結(jié)構(gòu)
本文中,我們討論了什么是線性結(jié)構(gòu),線性結(jié)構(gòu)有哪些特點(diǎn),并且詳細(xì)介紹了一個(gè)最簡(jiǎn)單線性結(jié)構(gòu)順序表,并且通過(guò)源代碼對(duì)她進(jìn)行一些列的分析,最后還舉了兩個(gè)例子,讓我們更好的理解順序表2012-11-11
C#?form-data上傳圖片流到遠(yuǎn)程服務(wù)器的詳細(xì)代碼
這篇文章主要介紹了C#?form-data上傳圖片流到遠(yuǎn)程服務(wù)器的詳細(xì)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
C# Winform 實(shí)現(xiàn)屏蔽鍵盤(pán)的win和alt+F4的實(shí)現(xiàn)代碼
最近在做一個(gè)惡搞程序,就是打開(kāi)后,程序獲得桌面的截圖然后,然后全屏顯示在屏幕上,用戶(hù)此時(shí)則不能進(jìn)行任何操作。2009-02-02
C#中String StringBuilder StringBuffer類(lèi)的用法
這篇文章給大家簡(jiǎn)單介紹下C#中String StringBuilder StringBuffer三個(gè)類(lèi)的用法,需要的的朋友參考下吧2017-05-05

