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

目录
相关文章
用555定时器接成的多谐振荡电路的介绍
用555定时器构建的多谐振荡电路 一、引言 多谐振荡电路是一种能够产生多个频率的振荡信号的电路结构。它在音乐合成器、电子琴等设备中有着广泛的应用。本文将介绍一种使用555定时器构建的多谐振荡电路。 二、555定时器简介 555定时器是一种经典的集成电路,由三个功能单元组成:比较器、RS触发器和放大器。它可以用作脉冲发生器、频率分频器、定时器等。在多谐振荡电路中,我们将利用555定时器的单稳态多谐振荡特性来实现多个频率的振荡。 三、电路设计 1. 电路原理 多谐振荡电路的基本原理是利用555定时器的单稳态多谐振荡特性。单稳态多谐振荡是指当555定时器处于单稳态时,输出信号的频率会随着电容和
365 0
|
6月前
定时器
定时器
58 0
|
6月前
|
C#
[C#] 定时器的使用
[C#] 定时器的使用
45 0
实现定时器(基于标准库提供的定时器、基于优先级队列自实现的定时器)
实现定时器(基于标准库提供的定时器、基于优先级队列自实现的定时器)
|
编解码 物联网 开发者
定时器介绍|学习笔记
快速学习定时器介绍
定时器介绍|学习笔记
|
数据采集 物联网 开发者
定时器实现|学习笔记
快速学习定时器实现
定时器实现|学习笔记
|
前端开发 JavaScript
34、定时器
setTimeout函数用来指定某个函数或某段代码,在多少毫秒之后执行。
144 0
|
移动开发 C# Windows