3 Timer for .Net Framework


在.Net Framework中有三種不一樣的Timer,分別是Windows.Forms.Timer、System.Timers.Timer、System.Threading.Timer 

Windows.Forms.Timer 
缺點:

  • 它的時間比另外兩個計時器不準 
  • 如果在Tick事件中要處理的程序時間太長,會有問題 

優點:

  • 容易使用, 可以直接呼叫表單畫面的控制項

System.Timers.Timer
  • Interval屬性值的資料型別是Double;而在Windows.Forms.Timer中這個屬性植是Integer
  • 引發的事件名稱為Elapsed;Windows.Forms.Timer則使用Tick事件
  • 使用背景執行緒來處理Elapsed事件所要處理的內容;Windows.Forms.Timer則是在UI執行緒,也就是表單畫面執行緒中處理Tick事件
  • Elapsed事件程序內容要變更表單畫面控制項時,需使用委派的方式或透過SynchronizingObject 屬性封送來處理(SystemTimer.SynchronizingObject = Form 物件)
  • 可藉由 AutoReset 屬性的設定決定是否要不斷的循環
  • 當我們將 AutoReset 屬性設為False時,可以發現Elapsed事件僅僅被執行了一次,在這種狀況下,若要再次執行必須再呼叫一次 Timer.Start() 方法
  • Interval屬性值不可太短, 1 ms 會有問題

System.Threading.Timer
  • Dim ThreadTimer As New System.Threading.Timer(AddressOf ThreadTimerProc)
  • 一定得用委派的方法處理不可
  • Threading.Timer.Change包含了四個多載,但不論哪一個多載,其第一個參數代表的是「變更開始的時間﹝dueTime﹞」;第二個參數則是代表「計時器的方法引動過程之間的時間間隔﹝period﹞」。
       1.dueTime:指的是當執行Timer.Change方法後延遲多久時間將會執行第一次的呼叫﹝以上面的範例就是呼叫ThreadTimerProc02方法﹞。當這個值為Infinite常數時﹝這個值其實就等於 -1﹞,意謂著無限期延遲等待,也就是將永遠不會執行呼叫。
       2.period:指的是在Timer.Chang中的程序已被執行過一次之後,間隔多久時間再執行下一次所呼叫的方法。當這個值為Infinite常數時﹝這個值其實就等於 -1﹞或是0時,意謂著不會有下一次的呼叫﹝有點類似在System.Timers.Timer中將AutoReset屬性設定為False一般﹞。

留言

熱門文章