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

 更新时间:2024年01月23日 08:47:52   作者: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#计时器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用C#编写Linux守护进程实例代码

    利用C#编写Linux守护进程实例代码

    如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件,下面这篇文章主要给大家介绍了关于利用C#编写Linux守护进程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。
    2018-01-01
  • WPF实现PropertyGrid功能

    WPF实现PropertyGrid功能

    这篇文章主要为大家详细介绍了在WPF中如何借助WinForm的PropertyGrid实现属性列表功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-11-11
  • C# 读取ttf字体文件里的Unicode实现

    C# 读取ttf字体文件里的Unicode实现

    这篇文章主要介绍了C# 读取 ttf字体文件里的 Unicode实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • C#表达式树基础教程

    C#表达式树基础教程

    这篇文章介绍了C#表达式树的基础教程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • c#简单工厂、工厂方法与抽象工厂的区别分析

    c#简单工厂、工厂方法与抽象工厂的区别分析

    看了网络上很多关于设计模式的方法,有的模式看起来相似,但本质还是区别很大的.像简单工厂,工厂方法和抽象工厂就有很明显的区别.
    2013-03-03
  • C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    C#实现把图片转换成二进制以及把二进制转换成图片的方法示例

    这篇文章主要介绍了C#实现把图片转换成二进制以及把二进制转换成图片的方法,结合具体实例形式分析了基于C#的图片与二进制相互转换以及图片保存到数据库的相关操作技巧,需要的朋友可以参考下
    2017-06-06
  • C#实现改变DataGrid某一行和单元格颜色的方法

    C#实现改变DataGrid某一行和单元格颜色的方法

    这篇文章主要介绍了C#实现改变DataGrid某一行和单元格颜色的方法,主要涉及DataGrid控件的添加与使用、数据源的绑定、单元格与行的获取等操作。需要的朋友可以参考下
    2014-09-09
  • C#调用CMD命令实例

    C#调用CMD命令实例

    这篇文章主要介绍了C#调用CMD命令实例本文只是给出一个比较简单的、入门级的例子,更多高级的操作技巧请参阅相关文章,需要的朋友可以参考下
    2014-08-08
  • ajaxFileUpload插件,C#返回Json数据报错问题的解决方案

    ajaxFileUpload插件,C#返回Json数据报错问题的解决方案

    这篇文章主要介绍了ajaxFileUpload插件,C#返回Json数据报错的解决方案,需要的朋友可以参考下
    2017-12-12
  • C#通过流写入数据到文件的方法

    C#通过流写入数据到文件的方法

    这篇文章主要介绍了C#通过流写入数据到文件的方法,涉及C#通过字节流读写文件的相关技巧,需要的朋友可以参考下
    2015-07-07

最新评论