成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

.NET Framework計時器對象應用技巧分享

開發 后端
.NET Framework計時器對象中分別在System.Timers;System.Threading;System.Windows.Forms中存在三種Timer類型。

.NET Framework作為一種比較全面的開發環境,可以為用戶創造出多種適合不同需求的環境進行方便的開發。不管在哪種平臺領域,計時器對象在日常開發中有著相當重要的地位。在.NET中,如果平常你不是特別注意的話,那你肯定不會發現,在.NET Framework計時器對象中竟然存在三個Timer類型,分別在:#t#

System.Timers

System.Threading

System.Windows.Forms

三個不同的命名空間下。(這里我們還暫且不算ASP.NET AJAX中新的那個Timer,這個Timer是用于客戶端的計時器對象。)那么我相信很多人會不解,都是定時器的功能,為什么還要定義這么多不同的Timer類型呢?拋開其在使用上的細微不同,我們這里就根據MSDN對這三種不同Timer的描述來作一個比較:

  1. System.Timers.Timer :System.
    ComponentModel.Component,
    ISupportInitialize 

首先這個.NET Framework計時器對象Timer類型是一個標準的定時器對象,我們暫且認為它的名稱空間緣故吧,它存在于System程序集里面。在MSDN里面對它的定義是一個Server-Based Timer(基于服務器的計時器),它是為在多線程環境中用于輔助線程而設計的。服務器計時器可以在線程間移動來處理引發的 Elapsed 事件,因此它是最為精確的一種計時器。我們可以簡單的把它理解為Windows服務的執行機制,只要宿主線程沒有被釋放,System.Timers.Timer只要處于活動狀態,就會一直存在下去,直到你手工停止或宿主線程結束。

MSDN上還有這樣一段話“Elapsed 事件在 ThreadPool 線程上引發。如果 Elapsed 事件的處理時間比 Interval 長,在另一個 ThreadPool 線程上將會再次引發此事件。因此,事件處理程序應當是可重入的。”也就是說,在你在每次的Elapsed 事件處理在下一次輪循時間到來的時候還沒有結束,Timer對象仍然會另一個線程中啟動Elapsed 的處理事件。這種機制的后果就可能會導致你的Timer已經被結束了,但是還會再執行Elapsed事件,MSDN的原文:“在一個線程調用 Stop 方法或將 Enabled 屬性設置為 false 的同時,可在另一個線程上運行事件處理方法。這可能導致在計時器停止之后引發 Elapsed 事件。”針對這種情況,如果你不愿讓它發生,你可能就必須做一些額外的工作來避免它的發生。這種機制同樣也適用于System.Threading.Timer。

  1. System.Threading.Timer :
     MarshalByRefObject, IDisposable 

這是一種輕量型的計時數,它在使用上與System.Timers.Timer的不同表現在:

使用回調機制,而不是事件機制。

.NET Framework計時器對象中的構造器中可以指定首次執行時間(構建后或修改后開始算)和間隔執行時間,這兩個時間(dueTime,period)可以是不同的。
它是沒有開始和結束控制接口,從構建開始算,直至釋放結束。

它基于ThreadPool線程機制,遵循著上述System.Timers.Timer的相同原則(紅色部分)。同時它在生命周期方面也有必須要注意的地方,它沒有開始或停止(有釋放接口Dispose)方法。在它的生命周期中,必須被其它對象所引用。一旦它不被任何對象所引用,那么就意味著這個Timer對象變成一個不可達對象,會被GC回收。MSDN原文解釋:

“只要在使用 Timer,就必須保留對它的引用。對于任何托管對象,如果沒有對 Timer 的引用,計時器會被垃圾回收。即使 Timer 仍處在活動狀態,也會被回收。”

MSDN中還有這樣一段話:

“System.Threading..::.Timer is a simple, lightweight timer that uses callback methods and is served by thread pool threads. It is not recommended for use with Windows Forms, because its callbacks do not occur on the user interface thread. System.Windows.Forms..::.Timer is a better choice for use with Windows Forms. For server-based timer functionality, you might consider using System.Timers..::.Timer, which raises events and has additional features.”

它告訴我們:System.Threading.Timer是一個簡單的,輕量級的,利用回調機制和線程池機制的計時器。在Windows Forms的場景下不建議我們使用這個對象,因為UI線程并不觸發回調函數,取而代之是Windows.Forms.Timer ,而如果希望利用基于服務器計時器的功能,則建議我們使用System.Timers.Timer。

System.Windows.Forms.Timer : System.ComponentModel.Component
這一種專門服務于Windows Forms的計時器,它在機制和原理上都與前面兩種有著比較大的區別。在接口使用上與System.Timers.Timer比較相似,同時具備了一些的Windows Form控件的特征。同時它的精度設計上也不是很高。

“Timer 用于以用戶定義的事件間隔觸發事件。Windows 計時器是為單線程環境設計的,其中,UI 線程用于執行處理。它要求用戶代碼有一個可用的 UI 消息泵,而且總是在同一個線程中操作,或者將調用封送到另一個線程。

使用此計時器時,請使用 Tick 事件執行輪詢操作,或在指定的時間內顯示啟動畫面。每當 Enabled 屬性設置為 true 且 Interval 屬性大于 0 時,將引發 Tick 事件,引發的時間間隔基于 Interval 屬性設置。”

在三種.NET Framework計時器對象中,都會一些共性和不同側重點,希望通過這樣一比較,讓大家都能對.NET Framework中的Timer對象有更深的了解,進而正確合理的使用它們。

責任編輯:曹凱 來源: 博客園
相關推薦

2010-01-06 17:02:28

.Net Framew

2010-01-05 13:45:15

.NET Framew

2010-01-25 11:29:33

Android計時器

2011-05-31 16:50:35

Android 線程

2012-05-08 13:58:37

SharePoint

2024-07-18 08:46:58

.NET輕量級計時器測量代碼塊

2010-01-22 14:51:31

VB.NET修改代理服

2023-12-11 09:50:35

Linux定時器

2011-09-08 14:01:01

Android Wid實例

2013-05-23 16:01:47

Android開發移動開發Chronometer

2013-03-25 10:03:35

網絡優化網絡抑制快速認知網絡

2010-01-11 15:31:04

VB.NET拖動窗體

2010-01-06 15:35:01

.Net Framew

2010-01-13 16:45:44

VB.NET刪除控件

2009-12-15 10:23:23

Ruby應用技巧

2010-01-05 17:30:23

.NET Framew

2022-06-23 07:23:34

自定義組件計時器

2023-04-17 09:08:27

CSS計時器

2010-01-05 17:59:54

.NET Framew

2010-01-06 18:33:56

.Net Framew
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本高清在线一区 | 欧美日韩高清在线一区 | 日韩av一区在线观看 | 少妇诱惑av| 99热首页| 欧美激情综合 | 黄色免费观看 | 欧美一区二区三区四区视频 | 日本a网站 | 亚洲视频在线播放 | 一级黄色片在线看 | 亚洲成人免费在线 | 色综合色综合 | 国产精品久久av | 一区二区三区视频在线观看 | 中文字幕在线中文 | 日韩成人免费视频 | 久久久久成人精品 | 亚洲欧美一区二区三区情侣bbw | 蜜桃视频在线观看免费视频网站www | 亚洲免费在线视频 | 欧美成人精品一区二区男人看 | 精品国产乱码久久久久久蜜柚 | 黑人巨大精品欧美一区二区免费 | 国产精品久久久久久久久免费相片 | 欧洲精品码一区二区三区免费看 | 免费精品一区 | 亚洲aⅴ| 久久精品国产亚洲一区二区三区 | 精品国产1区2区3区 一区二区手机在线 | 免费观看一级视频 | 91在线资源| 韩日精品一区 | 国内精品久久久久久影视8 最新黄色在线观看 | 日韩在线xx | 国产99精品 | 99精品久久久 | 日韩欧美福利视频 | 97国产精品视频人人做人人爱 | 国产欧美精品一区二区色综合 | 日韩欧美福利视频 |