C#中的三种定时器总结

简介: C#中的三种定时器总结

目录


摘要


1、Timer控件


2、System.Timers.Timer 类


3、System.Threading.Timer类


总结


摘要

目前,在.NET中有三种计时器:


1、System.Windows.Forms命名空间下的Timer控件,它直接继承自Componet。Timer控件只有绑定了Tick事件和设置Enabled=True后才会自动计时,停止计时可以用Stop()方法控制,通过Stop()停止之后,如果想重新计时,可以用Start()方法来启动计时器。Timer控件和它所在的Form属于同一个线程;


2、System.Timers命名空间下的Timer类。System.Timers.Timer类:定义一个System.Timers.Timer对象,然后绑定Elapsed事件,通过Start()方法来启动计时,通过Stop()方法或者Enable=false停止计时。AutoReset属性设置是否重复计时(设置为false只执行一次,设置为true可以多次执行)。Elapsed事件绑定相当于另开了一个线程,也就是说在Elapsed绑定的事件里不能访问其它线程里的控件(需要定义委托,通过Invoke调用委托访问其它线程里面的控件)。


3、System.Threading.Timer类。定义该类时,通过构造函数进行初始化。


1、Timer控件

 

tt.png

using System;


using System.Windows.Forms;



namespace TimerDemo


{


   public partial class FrmMain : Form


   {


       //定义全局变量


       public int currentCount = 0;


       public FrmMain()


       {


           InitializeComponent();


       }


       private void FrmMain_Load(object sender, EventArgs e)


       {


           //设置Timer控件可用


           this.timer.Enabled = true;


           //设置时间间隔(毫秒为单位)


           this.timer.Interval = 5000;


       }


       private void timer_Tick(object sender, EventArgs e)


       {


           currentCount += 5;


           this.txt_Count.Text = currentCount.ToString().Trim();


       }


       private void btn_Start_Click(object sender, EventArgs e)


       {


           //开始计时


           this.timer.Start();


       }


       private void btn_Stop_Click(object sender, EventArgs e)


       {


           //停止计时


           this.timer.Stop();


       }


   }


}


2、System.Timers.Timer 类


tt.png

using System;


using System.Windows.Forms;


namespace TimersTimer


{


   public partial class FrmMain : Form


   {


       //定义全局变量


       public int currentCount = 0;


       //定义Timer类


       System.Timers.Timer timer;


       //定义委托


       public delegate void SetControlValue(string value);


       public FrmMain()


       {


           InitializeComponent();


       }


       private void Form1_Load(object sender, EventArgs e)


       {


           InitTimer();


       }


       ///


       /// 初始化Timer控件


       ///


       private void InitTimer()


       {


           //设置定时间隔(毫秒为单位)


           int interval = 5000;


           timer = new System.Timers.Timer(interval);


           //设置执行一次(false)还是一直执行(true)


           timer.AutoReset = true;


           //设置是否执行System.Timers.Timer.Elapsed事件


           timer.Enabled = true;


           //绑定Elapsed事件


           timer.Elapsed += new System.Timers.ElapsedEventHandler(TimerUp);


       }


       ///


       /// Timer类执行定时到点事件


       ///


       ///


       ///


       private void TimerUp(object sender, System.Timers.ElapsedEventArgs e)


       {


           try


           {


               currentCount += 5;


               this.Invoke(new SetControlValue(SetTextBoxText),currentCount.ToString());


           }


           catch (Exception ex)


           {


               MessageBox.Show("执行定时到点事件失败:" + ex.Message);


           }


       }


       ///


       /// 设置文本框的值


       ///


       ///


       private void SetTextBoxText(string strValue)


       {


           this.txt_Count.Text = this.currentCount.ToString().Trim();


       }


       private void btn_Start_Click(object sender, EventArgs e)


       {


           timer.Start();


       }


       private void btn_Stop_Click(object sender, EventArgs e)


       {


           timer.Stop();


       }


   }


}


3、System.Threading.Timer类

tt.png

using System;


using System.Threading;


using System.Windows.Forms;



namespace Threading.Timer


{


   public partial class FrmMain : Form


   {


       //定义全局变量


       public int currentCount = 0;


       //定义Timer类


       System.Threading.Timer threadTimer;


       //定义委托


       public delegate void SetControlValue(object value);


       public FrmMain()


       {


           InitializeComponent();


       }


       private void FrmMain_Load(object sender, EventArgs e)


       {


           InitTimer();


       }


       ///


       /// 初始化Timer类


       ///


       private void InitTimer()


       {


           threadTimer = new System.Threading.Timer(new TimerCallback(TimerUp), null, Timeout.Infinite, 1000);


       }


       ///


       /// 定时到点执行的事件


       ///


       ///


       private void TimerUp(object value)


       {


           currentCount += 1;


           this.Invoke(new SetControlValue(SetTextBoxValue), currentCount);


       }


       ///


       /// 给文本框赋值


       ///


       ///


       private void SetTextBoxValue(object value)


       {


           this.txt_Count.Text = value.ToString();


       }


       ///


       /// 开始


       ///


       ///


       ///


       private void btn_Start_Click(object sender, EventArgs e)


       {


           //立即开始计时,时间间隔1000毫秒


           threadTimer.Change(0, 1000);


       }


       ///


       /// 停止


       ///


       ///


       ///


       private void btn_Stop_Click(object sender, EventArgs e)


       {


           //停止计时


           threadTimer.Change(Timeout.Infinite, 1000);


       }


   }


}



总结

在上面所述的三种计时器中,第一种计时器和它所在的Form处于同一个线程,因此执行的效率不高;而第二种和第三种计时器执行的方法都是新开一个线程,所以执行效率比第一种计时器要好,因此在选择计时器时,建议使用第二种和第三种。


tt.png

目录
相关文章
|
1月前
定时器
定时器
12 0
|
6月前
用555定时器接成的多谐振荡电路的介绍
用555定时器构建的多谐振荡电路 一、引言 多谐振荡电路是一种能够产生多个频率的振荡信号的电路结构。它在音乐合成器、电子琴等设备中有着广泛的应用。本文将介绍一种使用555定时器构建的多谐振荡电路。 二、555定时器简介 555定时器是一种经典的集成电路,由三个功能单元组成:比较器、RS触发器和放大器。它可以用作脉冲发生器、频率分频器、定时器等。在多谐振荡电路中,我们将利用555定时器的单稳态多谐振荡特性来实现多个频率的振荡。 三、电路设计 1. 电路原理 多谐振荡电路的基本原理是利用555定时器的单稳态多谐振荡特性。单稳态多谐振荡是指当555定时器处于单稳态时,输出信号的频率会随着电容和
175 0
|
4月前
|
C#
[C#] 定时器的使用
[C#] 定时器的使用
17 0
|
6月前
|
存储 算法
定时器/计数器应用的提高
定时器/计数器是数字电路中常用的功能模块,可以用于实现各种计时、计数和控制功能。提高定时器/计数器应用的关键在于深入理解其原理和功能,并结合具体应用场景进行合理设计和优化。以下是提高定时器/计数器应用的一些建议: 1. 熟悉定时器/计数器的工作原理: 了解定时器/计数器的工作原理是提高应用的基础。掌握定时器/计数器的计时和计数模式、时钟源选择、计数器位宽等相关知识,以及定时器/计数器的寄存器设置和控制方法。 2. 确定应用需求: 明确应用的具体需求,包括计时/计数的时间范围、精度要求、计数模式(递增/递减)、触发条件等。根据需求选择合适的定时器/计数器模块,并合理配置相关参数。 3. 时
28 0
|
9月前
扣奖(定时器)
扣奖(定时器)
33 0
|
数据采集 物联网 开发者
定时器实现|学习笔记
快速学习定时器实现
116 0
定时器实现|学习笔记
|
编解码 物联网 开发者
定时器介绍|学习笔记
快速学习定时器介绍
154 0
定时器介绍|学习笔记
|
前端开发 JavaScript
34、定时器
setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。
125 0
2.6.4 Qtimer定时器介绍
2.6.4 Qtimer定时器介绍
105 0
2.6.4 Qtimer定时器介绍