標籤:style http os strong 2014 art for re
一、關於本文
本文實現了類TimerTest,該類可以類比一個Timer,經過指定時間間隔執行某個事件。
二、TimerTest類
//定時器類class TimerTest{ //線程名 string _ThreadName; public string ThreadName { get { return _ThreadName; } private set { _ThreadName = value; } } //時間間隔 int _TimeInterval; public int TimeInterval { get { return _TimeInterval; } set { _TimeInterval = value; } } //當前計時器是否啟用 true:啟用 false:不啟用 bool _Enabled; public bool Enabled { get { return _Enabled; } set { _Enabled = value; } } //每隔一段時間需要啟動並執行事件 public delegate void TickEventHandler(); public event TickEventHandler TickEvent; /// <summary> /// 建立一個計時器(建構函式) /// </summary> /// <param name="ThreadName">線程名</param> /// <param name="TimeInterval">時間間隔</param> public TimerTest(string ThreadName, int TimeInterval = int.MaxValue) { this.ThreadName = ThreadName; this.TimeInterval = TimeInterval; this.Enabled = false; } /// <summary> /// 定期執行事件 /// </summary> public void Run() { while (true) { //如果當前計時器並未啟用,則每隔一段時間檢測是否被啟用 if (!this.Enabled) { Thread.Sleep(100); continue; } //觸發事件TickEvent if (TickEvent != null) { TickEvent(); } //休眠一定的時間,等待下一個迴圈 Thread.Sleep(TimeInterval % 100); for (int temp = 0; temp < TimeInterval / 100; temp++) { Thread.Sleep(100); if (!this.Enabled) { break; } } } }}
三、調用樣本
每1000毫秒輸出當前的時間
/// <summary>/// 測試用事件/// </summary>static void TestHandler(){ //TODO Console.WriteLine(DateTime.Now.ToLongTimeString());}static void Main(string[] args){ TimerTest tt = new TimerTest("timer_test", 1000); tt.Enabled = true; tt.TickEvent += TestHandler; Thread timer = new Thread(tt.Run); timer.Start(); Console.ReadLine();}
四、運行結果
END