C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#计时器

C#使用System.Threading.Timer实现计时器的示例详解

作者:rjcql

以往一般都是用 System.Timers.Timer 来做计时器,其实 System.Threading.Timer 也可以实现计时器功能,下面就跟随小编一起来学习一下如何使用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;
    }
}

调用示例

到此这篇关于C#使用System.Threading.Timer实现计时器的示例详解的文章就介绍到这了,更多相关C#计时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文