av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

.NETFramework計(jì)時(shí)器對(duì)象應(yīng)用技巧分享

.NET Framework作為一種比較全面的開發(fā)環(huán)境,可以為用戶創(chuàng)造出多種適合不同需求的環(huán)境進(jìn)行方便的開發(fā)。不管在哪種平臺(tái)領(lǐng)域,計(jì)時(shí)器對(duì)象在日常開發(fā)中有著相當(dāng)重要的地位。在.NET中,如果平常你不是特別注意的話,那你肯定不會(huì)發(fā)現(xiàn),在.NET Framework計(jì)時(shí)器對(duì)象中竟然存在三個(gè)Timer類型,分別在:#t#

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括沙坡頭網(wǎng)站建設(shè)、沙坡頭網(wǎng)站制作、沙坡頭網(wǎng)頁(yè)制作以及沙坡頭網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,沙坡頭網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到沙坡頭省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

System.Timers

System.Threading

System.Windows.Forms

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

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

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

MSDN上還有這樣一段話“Elapsed 事件在 ThreadPool 線程上引發(fā)。如果 Elapsed 事件的處理時(shí)間比 Interval 長(zhǎng),在另一個(gè) ThreadPool 線程上將會(huì)再次引發(fā)此事件。因此,事件處理程序應(yīng)當(dāng)是可重入的?!币簿褪钦f(shuō),在你在每次的Elapsed 事件處理在下一次輪循時(shí)間到來(lái)的時(shí)候還沒有結(jié)束,Timer對(duì)象仍然會(huì)另一個(gè)線程中啟動(dòng)Elapsed 的處理事件。這種機(jī)制的后果就可能會(huì)導(dǎo)致你的Timer已經(jīng)被結(jié)束了,但是還會(huì)再執(zhí)行Elapsed事件,MSDN的原文:“在一個(gè)線程調(diào)用 Stop 方法或?qū)?Enabled 屬性設(shè)置為 false 的同時(shí),可在另一個(gè)線程上運(yùn)行事件處理方法。這可能導(dǎo)致在計(jì)時(shí)器停止之后引發(fā) Elapsed 事件?!贬槍?duì)這種情況,如果你不愿讓它發(fā)生,你可能就必須做一些額外的工作來(lái)避免它的發(fā)生。這種機(jī)制同樣也適用于System.Threading.Timer。

 
 
 
  1. System.Threading.Timer :
     MarshalByRefObject, IDisposable 

這是一種輕量型的計(jì)時(shí)數(shù),它在使用上與System.Timers.Timer的不同表現(xiàn)在:

使用回調(diào)機(jī)制,而不是事件機(jī)制。

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

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

“只要在使用 Timer,就必須保留對(duì)它的引用。對(duì)于任何托管對(duì)象,如果沒有對(duì) Timer 的引用,計(jì)時(shí)器會(huì)被垃圾回收。即使 Timer 仍處在活動(dòng)狀態(tài),也會(huì)被回收?!?/p>

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是一個(gè)簡(jiǎn)單的,輕量級(jí)的,利用回調(diào)機(jī)制和線程池機(jī)制的計(jì)時(shí)器。在Windows Forms的場(chǎng)景下不建議我們使用這個(gè)對(duì)象,因?yàn)閁I線程并不觸發(fā)回調(diào)函數(shù),取而代之是Windows.Forms.Timer ,而如果希望利用基于服務(wù)器計(jì)時(shí)器的功能,則建議我們使用System.Timers.Timer。

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

“Timer 用于以用戶定義的事件間隔觸發(fā)事件。Windows 計(jì)時(shí)器是為單線程環(huán)境設(shè)計(jì)的,其中,UI 線程用于執(zhí)行處理。它要求用戶代碼有一個(gè)可用的 UI 消息泵,而且總是在同一個(gè)線程中操作,或者將調(diào)用封送到另一個(gè)線程。

使用此計(jì)時(shí)器時(shí),請(qǐng)使用 Tick 事件執(zhí)行輪詢操作,或在指定的時(shí)間內(nèi)顯示啟動(dòng)畫面。每當(dāng) Enabled 屬性設(shè)置為 true 且 Interval 屬性大于 0 時(shí),將引發(fā) Tick 事件,引發(fā)的時(shí)間間隔基于 Interval 屬性設(shè)置。”

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


網(wǎng)站名稱:.NETFramework計(jì)時(shí)器對(duì)象應(yīng)用技巧分享
鏈接URL:http://uogjgqi.cn/article/coeigji.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流