C# 中的 System.Threading.Timer 是一个基于线程池的定时器类,它允许在指定的时间间隔后执行回调方法。以下是其详细说明和使用方式:
构造函数
System.Threading.Timer 提供了多种构造函数重载方式:
Timer(TimerCallback): 创建一个 Timer 实例,使用 TimerCallback 委托来指定回调方法。
Timer(TimerCallback, Object, Int32, Int32): 创建一个 Timer 实例,指定回调方法、状态对象、延迟时间和周期时间。
csharp
using System;
using System.Threading;
// 创建 Timer 实例
Timer timer = new Timer(
callback: new TimerCallback(YourCallbackMethod),
state: null,
dueTime: 1000, // 延迟时间(毫秒)
period: 2000 // 周期时间(毫秒)
);
核心属性与方法
属性
- ActiveCount:获取当前活动的计时器数量。
方法
- Change:用于修改定时器的延迟时间和周期时间。
- Dispose:释放 Timer 占用的资源。
- DisposeAsync:异步释放 Timer 占用的资源。
使用示例
csharp
using System;
using System.Threading;
class Program
{
static void Main()
{
// 创建一个定时器,延迟1秒后开始,每2秒执行一次
Timer timer = new Timer(
callback: TimerCallbackMethod,
state: "定时器状态",
dueTime: 1000,
period: 2000
);
Console.WriteLine("定时器已启动,按任意键退出");
Console.ReadKey();
// 释放定时器资源
timer.Dispose();
}
private static void TimerCallbackMethod(object state)
{
Console.WriteLine($"定时器回调执行时间: {DateTime.Now:HH:mm:ss}");
Console.WriteLine($"状态信息: {state}");
}
}
关键特性
- 线程池执行:回调方法在 ThreadPool 线程上执行,不会阻塞主线程。
- 回调委托:需要通过 TimerCallback 委托指定回调方法。
- 参数传递:可以通过 state 参数向回调方法传递数据。
- 时间间隔:使用 Int32 类型表示时间间隔,单位为毫秒。
注意事项
1、回调方法的签名必须为 void MethodName(object state)。
2、如果需要在 UI 线程中更新界面,必须使用 Invoke 或 BeginInvoke 方法。
3、定时器必须手动释放资源,避免内存泄漏。
4、System.Threading.Timer 适用于高性能后台任务处理。