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

2021-09-22 07:40:01 字數 3054 閱讀 1570

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