当前位置: 首页 > news >正文

C# 异步编程(计时器)

计时器

计时器提供了另外一种定期重复运行异步方法的方式。尽管在.NET BCL中有好几个可用的
Timer类,但这里只会介绍system.Threading命名空间中的那个。
有关计时器类需要了解的重要事项如下所示。

  • 计时器在每次到期之后调用回调方法。回调方法必须是TimerCallback委托形式的,结构
    如下所示。它接受一个object类型的参数,并且返回类型是void。
    voidTimerCallback(Object state)
  • 当计时器到期之后,系统会在线程池中的一个线程上设置回调方法,提供state对象作为
    其参数,并且开始运行。
  • 可以设置的计时器的一些特性如下。
    • dueTime是回调方法首次被调用之前的时间。如果dueTime被设置为特殊的值Timeout.lnfinite,则计时器不会开始;如果被设置为0,则回调函数会被立即调用。
    • period是两次成功调用回调函数之间的时间间隔。如果它的值被设置为umeout.lnfinite,
      则回调在首次被调用之后不会再被调用。
    • state可以是null或在每次回调方法执行时要传入的对象的引用。

Timer类的构造函数接受回调方法名称、dueTime、period以及state作为参数。Timer有很
多构造函数,最为常用的形式如下:

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

如下代码语句展示了一个创建Timer对象的示例:

Timer myTimer=new Timer(MyCallback,someObject,2000,1000);

一旦Timer对象被创建,我们可以使用change方法来改变它的dueTime或period方法。
如下代码给出了一个使用计时器的示例。Main方法创建了一个计时器,2秒钟之后它会首次
调用回调,然后每隔1秒再调用1次。回调方法只是输出了一条包含其调用次数的消息。

using System;
using System.Threading;namespace Timers
{class Program{int TimesCalled=0;void Display(object state){Console.WriteLine($"{(string)state}{++TimesCalled}");}static void Main(){Program p=new Program();Timer myTimer=new Timer(p.Display,"Processing timer event",2000,1000);Console.WriteLine("Timer started.");Console.ReadLine();}}
}

.NETBCL还提供了其他几个计时器类,每一个都有其用途。其他计时器类如下所示。

  • System.Windows.Forms.Timer这个类在Windows Forms应用程序中使用,用来定期把
    WM_TIMER消息放到程序的消息队列中。当程序从队列获取消息后,它会在主用户接口线
    程中同步处理程序,这对WindowsForms应用程序来说非常重要。
  • System.Timers.Timer这个类更复杂,它包含了很多成员,使我们可以通过属性和方法
    来操作计时器。它还有一个叫作Elapsed的成员事件,每次时间到就会触发。这个计时器
    可以运行在用户接口线程或工作线程上。
http://www.lryc.cn/news/617551.html

相关文章:

  • 【C++】封装哈希表模拟实现unordered_set和unordered_map
  • Android 16 的用户和用户组定义
  • 基于倾斜摄影三维模型影像提取水面
  • Spring源码解析 - SpringApplication run流程-prepareContext源码分析
  • 了解不同电磁仿真类型中的电容报告
  • 某地渣库边坡自动化监测服务项目
  • GDB调试 core dump 文件与栈溢出分析
  • 农业气象站的应用场景拓展
  • 学习观察和行动:机器人操作中任务-觉察的视图规划
  • 2025年渗透测试面试题总结-13(题目+回答)
  • Python训练营打卡 DAY 33 MLP神经网络的训练
  • 首涂模板第45套主题2.0修正版苹果CMS模板奇艺主题二开源码
  • 【AxureMost落葵网】CRM客户关系管理原型系统-免费
  • MD5:理解MD5 / MD5核心特性 / MD5 在前端开发中的常见用途 / 在线生成MD5 / js-md5
  • 【Kafka系列】第三篇| 在哪些场景下会选择使用 Kafka?
  • 【车联网kafka】Kafka核心架构与实战经验(第三篇)
  • 钓鱼鱼饵制作的方式
  • Go 多进程编程-同步
  • 免费好用的数字人API
  • synchronized 、volatile 以及 ReentrantLockReentrantLock 的区别
  • monorepo架构设计方案
  • 小白入门指南:Edge SCDN 轻松上手
  • 【NOI】落谷2025/08/10 SCP-J 模拟测试 第10题 求构成三角形的概率
  • qss基础
  • Godot ------ 平滑拖动02
  • 机器学习第九课之DBSCAN算法
  • 智慧工地:以三大监测技术筑牢安全屏障
  • (Arxiv-2025)Phantom-Data:迈向通用的主体一致性视频生成数据集
  • Qwen 3 架构深度解析:混合推理、MoE创新与开源生态的全面突破
  • 工业智造新引擎:BRAV-7135赋能自动化产线升级