在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 s...
深入淺出多執行緒系列之七 4種定時器
在 framework 中存在著 4種定時器 其中分為兩類,多執行緒計時器 1 system.threading.timer 2 system.timers.timer 特殊目的的單執行緒計時器 1 system.windows.forms.timer windows forms timer 2 s...