在
framework
中存在著
4種定時器:其中分為兩類,
多執行緒計時器
1:system.threading.timer
2:system.timers.timer
特殊目的的單執行緒計時器:
1:system.windows.forms.timer
(windows forms timer)
2:system.windows.threading.dispatchertimer(wpf timer);
多執行緒計時器比較強大,精確,而且可擴充套件性強;
單執行緒計時器比較安全
,對於更新
windows forms controls
或者wpf
這種簡單任務來說更方便。
system.threading.timer
是最簡單的多執行緒計時器。在下面的例子中,定時器在
5秒後開始定時
1秒的呼叫
tick
方法。
public
static
void
main ()
static
void
tick(
object
data)
.net framework
提供的另乙個計時器
system.timers.timer.
簡單的對
system.threading.timer
進行了包裝。增加了下面幾個特性。
實現了component,
所以可以在設計器顯示。
代替change
方法的乙個
interval
屬性代替
callback
委託的乙個
elapsed
事件啟動和停止
timer
的enabled
屬性,預設是
false
。為了避免
enabled
造成混亂,提供了
start
和stop
方法。是否在每次指定的間隔結束時引發
elapsed
時間,還是僅間隔第一次結束後執行的
autoreset
屬性。在
wpf或
windows forms
中安全的呼叫方法的
synchronizingobject
物件。
public
static
void
mainthread()
static
void
tmr_elapsed(
object
sender, elapsedeventargs e)
單執行緒計時器:
1:system.windows.forms.timer
(windows forms timer)
2:system.windows.threading.dispatchertimer(wpf timer);
單執行緒計時器是被設計成屬於他們執行環境的計時器,如果你在乙個
windows
服務應用程式中使用
windows forms
的timer
,timer
事件並不會被觸發,只有在對應的環境下才會被觸發。
像system.timers.timer
一樣,他們也提供了相同的成員
(interval,tick,start,stop)
,但是他們內部的工作原理不同,
wpf
和windows forms
的計時器使用訊息迴圈機制來取代執行緒池產生訊息的機制。
這意味著
tick
事件總是在建立
timer
的那個執行緒上執行,同時也意味著如果上乙個
tick
訊息還未被處理,即使時間超過了間隔時間,在訊息迴圈中也只存在乙個
tick
訊息。
下面是它們的優點:
你可以忘記執行緒安全。 乙個
tick
事件在前乙個
tick
事件被處理完畢前不會被觸發。
你可以直接在
tick
事件處理**中更新控制項,不需要呼叫
control.invoke
或dispatcher.invoke.
看下在winform中使用單執行緒定時器的效果:
//基於windows訊息迴圈的單執行緒計時器
private
system.windows.forms.timer timer
=new
timer() ;
public
form1()
void
timer_tick(
object
sender, eventargs e)
如果執行上面的**,會發現ui介面響應速度很慢,
原理上面已經介紹了:單執行緒計時器基於windows訊息迴圈,應用程式會同步的處理計時器的訊息。
解決這個問題的方法是使用多執行緒計時器:只要修改**使用多執行緒計時器即可:
//使用多執行緒計時器
private
system.timers.timer timer
=new
system.timers.timer();
public
form1()
void
timer_elapsed(
object
sender, system.timers.elapsedeventargs e)
上面的例子告訴我們單執行緒計時器的缺點:
除非tick
事件的處理**執行的非常快,否則
ui介面會變得響應很慢。
所以wpf和
windows forms
的計時器都非常適合小任務,尤其是介面更新的任務。例如時鐘和計數顯示。否則,你需要乙個多執行緒計時器。
深入淺出多執行緒系列之七 4種定時器
在framework中存在著4種定時器 其中分為兩類,多執行緒計時器 1 system.threading.timer 2 system.timers.timer 特殊目的的單執行緒計時器 1 system.windows.forms.timer windows forms timer 2 syst...
深入淺出多執行緒系列之七 4種定時器
在framework中存在著4種定時器 其中分為兩類,多執行緒計時器 1 system.threading.timer 2 system.timers.timer 特殊目的的單執行緒計時器 1 system.windows.forms.timer windows forms timer 2 syst...
深入淺出多執行緒系列之七 4種定時器
在 framework 中存在著 4種定時器 其中分為兩類,多執行緒計時器 1 system.threading.timer 2 system.timers.timer 特殊目的的單執行緒計時器 1 system.windows.forms.timer windows forms timer 2 s...