伺服器計時器、Windows 計時器和線程計時器

來源:互聯網
上載者:User

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 的計時器針對在 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..........來對介面的訪問(當然,還要用到非同步作業。。)

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.