C#定時(shí)器中的System.Timers.Timer詳解
System.Timers.Timer 是 .NET 框架中用于創(chuàng)建基于時(shí)間間隔的定時(shí)器類,它屬于 System.Timers 命名空間。這個(gè)定時(shí)器類設(shè)計(jì)用于多線程環(huán)境中的服務(wù)器或服務(wù)組件,沒有用戶界面,在運(yùn)行時(shí)不可見。
核心特性
事件驅(qū)動(dòng)模型: System.Timers.Timer 通過 Elapsed 事件來通知定時(shí)器已經(jīng)過了指定的時(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)重置功能: 通過 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ā)事件,類旨在用作多線程環(huán)境中的基于服務(wù)器或服務(wù)組件;它沒有用戶界面,在運(yùn)行時(shí)不可見(不可以直接更新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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#調(diào)用執(zhí)行外部程序的實(shí)現(xiàn)方法
這篇文章主要介紹了C#調(diào)用執(zhí)行外部程序的實(shí)現(xiàn)方法,涉及C#進(jìn)程調(diào)用的相關(guān)使用技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-04-04
C#?Unity使用正則表達(dá)式去除部分富文本的代碼示例
正則表達(dá)式在我們?nèi)粘i_發(fā)中的用處不用多說了吧,下面這篇文章主要給大家介紹了關(guān)于C#?Unity使用正則表達(dá)式去除部分富文本的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
C#實(shí)現(xiàn)壓縮和解壓縮的方法示例【Gzip和Zip方式】
這篇文章主要介紹了C#實(shí)現(xiàn)壓縮和解壓縮的方法,結(jié)合具體實(shí)例形式分析了Gzip和Zip兩種壓縮操作實(shí)現(xiàn)方法,需要的朋友可以參考下2017-06-06
C# MVC 使用LayUI實(shí)現(xiàn)下拉框二級聯(lián)動(dòng)的功能
這篇文章主要介紹了C# MVC 如何使用LayUI實(shí)現(xiàn)下拉框二級聯(lián)動(dòng),文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06
C#實(shí)現(xiàn)學(xué)員信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)學(xué)員信息管理系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06

