System.Threading.Timer 定时器
创始人
2024-05-30 07:23:58
0

System.Threading.Timer 定时器

.NET 包含多个定时器类,每个类提供不同的功能:

  • System.Timers.Timer ,触发事件并在多个事件接收器中定期执行代码。多线程
  • System.Threading.Timer ,定期在线程池上执行单个回调方法。多线程
  • System.Windows.Forms.Timer ,Windows 窗口组件,用于触发事件并在多个事件接收器中定期执行代码。单线程
  • System.Web.UI.Timer ,定期执行异步或网页回发。
  • System.Windows.Threading.DispatcherTimer ,集成到队列中的 DispatcherTimer 计时器,此计时器在指定的时间间隔内使用指定的优先级进行处理。

System.Threading.Timer 定时器知识点

Timer 类的构造函数接受回调方法名称、dueTime、period 以及 state 作为参数。Timer 存在许多构造函数,较为常用的一种形式如下:

Timer(TimerCallback callback, object state, uint dueTime, uint period)

  • 定时器在每次到期后调用调回方法。调回方法必须为 TimerCallback 委托形式,结构如下:

    void TimerCallback(object state)

  • dueTime 是调回方法首次被调回之前所用的时间。

  • period 是两次成功调用回调函数之间的时间间隔。

  • state 可以是 null 或者为每次回调方法执行时要传入的对象引用。

  • AutoResetEvent 表示线程同步事件在一个等待线程释放后收到信号时自动重置

示例

// 主线程不结束,定时器线程就不会结束
class program{void TimePrint(object state){ // 调回函数var _timeNow = DateTime.Now; // 获得当前系统时间Console.WriteLine($"{_timeNow}");}static void Main(){program p = new program();Timer _timer = new Timer(p.TimePrint,null,200,1000); // 构建计时器Thread.Sleep(10000); // 暂停主线程,防止主线程退出,如果不加此句,可能会导致计时器无法工作}
}
// 计时5次之后结束定时
class program{int count = 0;void TimePrint(object state){var _timeNow = DateTime.Now;var autoResetEvent = (AutoResetEvent) state; // 强制转换Console.WriteLine($"{_timeNow}");if(++ count == 5) { // 计时5次count = 0;autoResetEvent.Set(); // 重置信号}}static void Main(){program p = new program();var _autoEvent = new AutoResetEvent(false); Timer _timer = new Timer(p.TimePrint,_autoEvent,200,1000);_autoEvent.WaitOne(); // 等待计时线程信号,计时器线程发送一次重置信号后,此语句运行结束_timer.Dispose(); // 注销计时线程}
}
/*
这里不加 Thread.Sleep() 也能正常运行的原因是主线程在等待  _autoEvent.WaitOne() 的执行。
当我们把 _timer.Dispose() 注释,会发现计时器线程还在运行。(此时需要加上 Thread.Sleep() 查看结果)
*/

参考文献

  • Timer 类

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...