C# 中的定时器 System.Threading.Timer用法

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 适用于高性能后台任务处理。

相关推荐
EndingCoder2 小时前
高级项目:构建一个 CLI 工具
大数据·开发语言·前端·javascript·elasticsearch·搜索引擎·typescript
xianrenli382 小时前
python版本配置
开发语言·python
血小板要健康2 小时前
笔试面经2(上)(纸质版)
java·开发语言
缺点内向2 小时前
Word 自动化处理:如何用 C# 让指定段落“隐身”?
开发语言·c#·自动化·word·.net
啵啵鱼爱吃小猫咪2 小时前
机器人标准DH(SDH)与改进DH(MDH)
开发语言·人工智能·python·学习·算法·机器人
轩情吖2 小时前
Qt多元素控件之QTreeWidget
开发语言·c++·qt·控件·qtreewidget·桌面级开发
KvPiter2 小时前
Clawdbot 中文汉化版 接入微信、飞书
人工智能·c#
2601_949847752 小时前
Flutter for OpenHarmony 剧本杀组队App实战:关于我们页面实现
开发语言·javascript·flutter
轩情吖2 小时前
Qt多元素控件之QTableWidget
开发语言·c++·qt·表格·控件·qtablewidget