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

案例代碼
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)建定時器,每3秒執(zhí)行一次
backgroundTimer = new Timer(3000);
backgroundTimer.Elapsed += OnTimerElapsed;
backgroundTimer.AutoReset = true;
// 啟動定時器
backgroundTimer.Enabled = true;
isRunning = true;
Console.WriteLine("定時器已啟動,每3秒執(zhí)行一次后臺任務(wù)");
Console.WriteLine("輸入 'stop' 停止定時器,輸入 '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($"[后臺任務(wù) {taskCounter}] 執(zhí)行時間: {e.SignalTime:yyyy-MM-dd HH:mm:ss}");
// 模擬一些后臺工作
PerformBackgroundWork();
}
private static void PerformBackgroundWork()
{
try
{
// 模擬耗時操作
Thread.Sleep(1000);
Console.WriteLine($"[后臺任務(wù) {taskCounter}] 工作完成");
}
catch (Exception ex)
{
Console.WriteLine($"[錯誤] 后臺任務(wù)執(zhí)行出錯: {ex.Message}");
}
}
private static void StopTimer()
{
if (isRunning)
{
backgroundTimer.Enabled = false;
isRunning = false;
Console.WriteLine("定時器已停止");
}
}
}
}與其他定時器的區(qū)別
System.Timers.Timer 與 System.Threading.Timer 和 System.Windows.Forms.Timer 相比,具有以下特點(diǎn):
● System.Timers.Timer: 定期觸發(fā)事件,類旨在用作多線程環(huán)境中的基于服務(wù)器或服務(wù)組件;它沒有用戶界面,在運(yùn)行時不可見(不可以直接更新UI界面)
● System.Threading.Timer: 定期在線程池線程上執(zhí)行單個回調(diào)方法(不可以直接更新UI界面)
● System.Windows.Forms.Timer: 一種 Windows 窗體組件,按固定時間間隔觸發(fā)事件(可以直接更新UI界面)
到此這篇關(guān)于C#中定時器中的System.Timers.Timer詳解的文章就介紹到這了,更多相關(guān)C# 定時器System.Timers.Timer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法
這篇文章主要介紹了C#調(diào)用執(zhí)行外部程序的實現(xiàn)方法,涉及C#進(jìn)程調(diào)用的相關(guān)使用技巧,非常簡單實用,需要的朋友可以參考下2015-04-04
C#?Unity使用正則表達(dá)式去除部分富文本的代碼示例
正則表達(dá)式在我們?nèi)粘i_發(fā)中的用處不用多說了吧,下面這篇文章主要給大家介紹了關(guān)于C#?Unity使用正則表達(dá)式去除部分富文本的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
C#實現(xiàn)壓縮和解壓縮的方法示例【Gzip和Zip方式】
這篇文章主要介紹了C#實現(xiàn)壓縮和解壓縮的方法,結(jié)合具體實例形式分析了Gzip和Zip兩種壓縮操作實現(xiàn)方法,需要的朋友可以參考下2017-06-06
C# MVC 使用LayUI實現(xiàn)下拉框二級聯(lián)動的功能
這篇文章主要介紹了C# MVC 如何使用LayUI實現(xiàn)下拉框二級聯(lián)動,文中示例代碼非常詳細(xì),供大家參考和學(xué)習(xí),感興趣的朋友可以了解下2020-06-06

