天天看點

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類。定義該類時,通過構造函數進行初始化。

C#中的三種定時器總結

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();

   }

}

C#中的三種定時器總結

namespace TimersTimer

       //定義Timer類

       System.Timers.Timer timer;

       //定義委托

       public delegate void SetControlValue(string value);

       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();

           timer.Start();

           timer.Stop();

C#中的三種定時器總結

using System.Threading;

namespace Threading.Timer

       System.Threading.Timer threadTimer;

       public delegate void SetControlValue(object value);

       /// 初始化Timer類

           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();

       /// 開始

           //立即開始計時,時間間隔1000毫秒

           threadTimer.Change(0, 1000);

       /// 停止

           threadTimer.Change(Timeout.Infinite, 1000);

在上面所述的三種計時器中,第一種計時器和它所在的Form處于同一個線程,是以執行的效率不高;而第二種和第三種計時器執行的方法都是新開一個線程,是以執行效率比第一種計時器要好,是以在選擇計時器時,建議使用第二種和第三種。

C#中的三種定時器總結