C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析
主要介绍了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法分析,以实例形式较为详细的讲述了.NET Framework里面提供的三种Timer具体用法,需要的朋友可以参考下 在C#中,有三种Timer类可供使用,分别是System.Windows.Forms.Timer、System.Timers.Timer和System.Threading.Timer。这些Timer类都是.NET Framework提供的,各有特点,适用于不同的场景。 **System.Windows.Forms.Timer** System.Windows.Forms.Timer是专门针对Windows Forms应用程序设计的。它的主要特点是基于Windows消息循环,并通过事件方式触发。当Timer的Interval设置后,它会在指定的时间间隔内调用挂接在Tick事件上的EventHandler。由于此Timer在UI线程中运行,因此在Tick事件处理程序中可以直接修改UI元素,而无需担心跨线程访问问题。然而,这也意味着如果在Tick事件处理程序中执行了长时间的UI操作,可能会阻塞消息队列,导致Tick事件丢失或UI无响应。此外,Windows.Forms.Timer的精度较低,约为55毫秒。 ```csharp public partial class Form1 : Form { int num = 0; public Form1() { InitializeComponent(); this.Form_Timer.Tick += new System.EventHandler(this.Form_Timer_Tick); } private void Form_Timer_Tick(object sender, EventArgs e) { label1.Text = (++num).ToString(); Thread.Sleep(3000); // 这会导致UI线程阻塞 } private void button1_Click(object sender, EventArgs e) { Form_Timer.Start(); } private void button2_Click(object sender, EventArgs e) { Form_Timer.Stop(); } } ``` **System.Timers.Timer** System.Timers.Timer不依赖于UI线程,它在单独的线程上运行,触发Elapsed事件而不是Tick事件。这意味着它更适合执行后台任务,不会影响UI线程。AutoReset属性用于控制计时器在触发事件后是否自动重置,以再次启动计时周期。与Windows.Forms.Timer相比,它提供了更好的性能和更精确的时间间隔控制。 ```csharp using System.Timers; public partial class Form1 : Form { private Timer timer = new Timer(); public Form1() { InitializeComponent(); timer.Elapsed += new ElapsedEventHandler(OnElapsedTime); timer.Interval = 1000; // 1秒间隔 } private void OnElapsedTime(object source, ElapsedEventArgs e) { // 执行后台任务 } private void button1_Click(object sender, EventArgs e) { timer.Enabled = true; } private void button2_Click(object sender, EventArgs e) { timer.Enabled = false; } } ``` **System.Threading.Timer** System.Threading.Timer是最灵活的Timer,因为它允许在任何线程上运行,且提供了更多的控制选项。它的Callback参数是一个委托,当计时器触发时,会调用这个委托。此Timer不提供自动重置功能,因此需要在回调方法中手动控制。 ```csharp using System.Threading; public partial class Form1 : Form { private Timer timer; public Form1() { InitializeComponent(); timer = new Timer(TimerCallback, null, 1000, Timeout.Infinite); } private void TimerCallback(object state) { // 执行任务 // 如果需要再次触发,可以调用timer.Change(1000, Timeout.Infinite); } private void button1_Click(object sender, EventArgs e) { timer.Change(1000, Timeout.Infinite); } private void button2_Click(object sender, EventArgs e) { timer.Change(Timeout.Infinite, Timeout.Infinite); } } ``` 总结来说,选择哪种Timer取决于你的需求。如果你需要在UI线程上执行操作且对精度要求不高,可以选择System.Windows.Forms.Timer;如果你需要在后台线程上执行任务,不影响UI线程,System.Timers.Timer是一个好选择;而System.Threading.Timer则适合需要更多控制权和灵活性的高级用例。在实际开发中,应根据应用的需求和性能要求来选择最适合的Timer类。


























- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 最新数据库课程设计心得体会范文(1).docx
- 软件配置管理报告(1).docx
- 220kv变电站综合自动化110kv第八回出线保护配置及整定计算(建筑电气说明书书论文100页)-学位论文(1).doc
- 基于matlab的数值计算中的优化技术-学位论文(1).doc
- 网站建设方案(1)(1).doc
- 电子商务物流管理概述(1).pptx
- 互联网背景下的中国农业银行转型与营销策略(1).docx
- 自动化控制仪表安装工程预算知识问答(1).doc
- JSP网上教学个性化服务在线考试系统论文及毕业设计答辩稿(1).pptx
- 算法与程序设计:第1章-算法基础(1).ppt
- 五轴编程UG-软件教程.ppt
- 基于电气工程与自动化控制分析探讨(1).docx
- 【推荐下载】物联网在工业领域拥有巨大的潜力(1).pdf
- 软件的项目投标技术标书(1).doc
- 计算机科学与技术专业课程(1).doc
- 网站策划方案心得体会(2)(1).doc


