深入淺出多執行緒系列之七 4種定時器

2021-06-10 09:14:17 字數 2366 閱讀 8361

在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...