2009-06-23日上午的時候,查看同事的wpf程式性,使用了一個dispatcherTimer ,好像自己沒有使用過,因此,查看了下msdn的介紹,然後,自己在尋找了下下其他的timer類的相關知識,主要表現在 如下幾個timer類:
1:System.Timers命名空間
2:System.Threading命名空間
3:System.Windows.Forms命名空間
如下的文字,全部從msdn協助文檔上截取,放到此處,避免以後查MSDN查不到。。。
ms-help://MS.MSDNQTR.v90.chs/dv_fxradcomp/html/adc0bc0a-a519-4812-bafc-fb9d1a5801fc.htm
伺服器計時器、Windows 計時器和線程計時器
Visual Studio 和 .NET Framework 中包含三個計時器控制項:
基於 Windows 的計時器針對在 Windows 表單應用程式中使用而進行了最佳化。基於伺服器的計時器是傳統的計時器為了在伺服器環境上運行而最佳化後的更新版本。線程計時器是一種簡單的、輕量級計時器,它使用回調方法而不是使用事件,並由線程池線程提供支援。
在 Win32 體繫結構中有兩種類型的線程:UI 線程和輔助線程。UI 線程絕大多數時間處於空閑狀態,等待訊息迴圈中的訊息到來。一旦接收到訊息,它們就進行處理並等待下一個訊息到來。另外,輔助線程用來執行幕後處理而且不使用訊息迴圈。Windows 計時器和基於伺服器的計時器在運行時都使用 Interval 屬性。線程計時器的時間間隔在 建構函式中設定。計時器的設計目的各不相同,它們的線程處理明確地指出了這一點:
Windows 計時器是為單線程環境設計的,其中,UI 線程用於執行處理。Windows 計時器的精度限定為 55 毫秒。這些傳統計時器要求使用者代碼有一個可用的 UI 訊息泵,而且總是在同一個線程中操作,或者將調用封送到另一個線程。對於 COM 組件來說,這樣會降低效能。
基於伺服器的計時器是為在多線程環境下與輔助線程一起使用而設計的。由於它們使用不同的體繫結構,因此基於伺服器的計時器可能比 Windows 計時器精確得多。伺服器計時器可以線上程之間移動來處理引發的事件。
對訊息不線上程上發送的方案中,線程計時器是非常有用的。例如,基於 Windows 的計時器依賴於作業系統計時器的支援,如果不線上程上發送訊息,與計時器相關的事件將不會發生。在這種情況下,線程計時器就非常有用。
Windows 計時器位於 命名空間中,伺服器計時器 命名空間中,線程計時器位於 命名空間中。
留一些問題在這個地方,希望如果看到本文章的各位,能夠幫忙回答下:
1:DispatcherTimer算不算這樣的Timer???????或者說,使用了如上的那個Timer? ????? System.Windows.Forms.Timer?????或者,就是System.Windows.Forms.Timer的WPF實現?
2:如下的代碼:
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
dispatcherTimer.Interval = new TimeSpan(0, 0, 10);
dispatcherTimer.Start();
private void dispatcherTimer_Tick(object sender, EventArgs e)
{
Lables.Content = "111";
System.Threading.Thread.Sleep(5 * 60 * 1000);//類比長時間的操作。。。
}
如上紅色的地方,雖然在 dispatcherTimer_Tick 函數裡面,我們不一定必須使用Dispatcher.Invoke等等的形式來對Lables的調用,但是,如上的代碼,還是會引起介面線程的掛起,呵呵。。所以,對於使用 計時器來間隔執行程式的時候,如果花費的時間長,還不如去使用System.Timers.Timer以及配合Dispatcher.Invoke..........來對介面的訪問(當然,還要用到非同步作業。。)