C# 使用System.Threading.Timer 实现计时器

写在前面

以往一般都是用 System.Timers.Timer 来做计时器,而 System.Threading.Timer 也可以实现计时器功能,并且还可以配置首次执行间隔,在功能上比System.Timers.Timer更加丰富;根据这个特性就可以实现按指定时间间隔对委托进行单次调用。 执行的回调委托也是在 ThreadPool 线程上执行,支持多线程运行环境。

代码实现

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    private static Timer timer;

    static void Main(string[] args)
    {
        var dueTime = 1000;  // 首次执行延迟时间
        var interval = 2000; // 后续执行间隔时间
        var timerState = new TimerState { Counter = 0 };

        timer = new Timer(
            callback: new TimerCallback(TimerTask),
            state: timerState,
            dueTime: dueTime,
            period: interval);

        Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 准备开始执行...");
        while (timerState.Counter <= 10)
        {
            Task.Delay(1000).Wait();
        }

        timer.Dispose();
        Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 完成.");
    }

    private static void TimerTask(object timerState)
    {
        Console.WriteLine($"{DateTime.Now:yyyy-MM-dd:HH:mm:ss.fff}: 触发了一次新的回调.");
        var state = timerState as TimerState;
        Interlocked.Increment(ref state.Counter);
    }

    class TimerState
    {
        // 计数器
        public int Counter;
    }
}

调用示例

相关推荐

  1. 使用 Qt 实现计算器

    2024-01-27 04:34:02       30 阅读
  2. C#使用Stopwatch类来实现计时功能

    2024-01-27 04:34:02       38 阅读
  3. C# 系统学习(实例计算器

    2024-01-27 04:34:02       42 阅读
  4. css计时器 animation实现计时器延时器

    2024-01-27 04:34:02       62 阅读
  5. C语言实现计算器功能

    2024-01-27 04:34:02       55 阅读
  6. C# Stopwatch 计时器

    2024-01-27 04:34:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-27 04:34:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-27 04:34:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-27 04:34:02       87 阅读
  4. Python语言-面向对象

    2024-01-27 04:34:02       96 阅读

热门阅读

  1. 跨语言编程:在C#应用程序中调用Python

    2024-01-27 04:34:02       42 阅读
  2. laspy + open3d 实现.las点云可视化

    2024-01-27 04:34:02       51 阅读
  3. vue的this指向问题

    2024-01-27 04:34:02       48 阅读
  4. 【css技巧】css实现边框渐变

    2024-01-27 04:34:02       65 阅读
  5. 张维迎《博弈与社会》笔记(1)序言

    2024-01-27 04:34:02       49 阅读
  6. 844.比较含退格的字符串(力扣LeetCode)

    2024-01-27 04:34:02       46 阅读
  7. 【MySQL事务】MySQL事务初识

    2024-01-27 04:34:02       56 阅读
  8. C# Queryable类

    2024-01-27 04:34:02       49 阅读
  9. vue创建组件和使用

    2024-01-27 04:34:02       56 阅读