自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

講解VB.NET定時(shí)器中System.Timers.Timer類(lèi)

開(kāi)發(fā) 后端
這里為你介紹了除了標(biāo)準(zhǔn)的EventArgs成員,ElapsedEventArgs類(lèi)暴露了一個(gè)公共的SignalTime屬性,它包含了一個(gè)精確的VB.NET定時(shí)器時(shí)間片消失的時(shí)間。

在向大家詳細(xì)介紹VB.NET定時(shí)器 之前,首先讓大家了解下VB.NET,然后全面介紹 System.Timers.Timer 。VB.NET框架文檔指出System.Timers.Timer類(lèi)是一個(gè)VB.NET定時(shí)器中服務(wù)定時(shí)器,是為多線程環(huán)境進(jìn)行設(shè)計(jì)和優(yōu)化。該定時(shí)器類(lèi)的實(shí)例能夠被多個(gè)線程安全地訪問(wèn)。不像System.Windows.Forms.Timer,System.Timers.Timer缺省的,將在一個(gè)工作者線程上調(diào)用你的定時(shí)器事件處理函數(shù),該工作者線程是從公共語(yǔ)言運(yùn)行時(shí)(CLR)線程池中獲得。這意味著在你的逝去的時(shí)間處理函數(shù)代碼中必須遵從Win32編程的黃金規(guī)則:除了創(chuàng)建該控件實(shí)例的線程之外,一個(gè)控件的實(shí)例從來(lái)不被任何其它的線程所訪問(wèn)。

VB.NET System.Timers.Timer提供了一個(gè)簡(jiǎn)單的方法處理這樣的困境——暴露一個(gè)公共的SynchronizingObject屬性。把該屬性設(shè)置為一個(gè)窗體實(shí)例(或者窗體上的一個(gè)控件)將保證你的事件處理函數(shù)代碼運(yùn)行在SynchronizingObject被實(shí)例化的同一個(gè)線程里。

如果你使用了Visual Studio .NET工具箱,Visual Studio .NET自動(dòng)的設(shè)置SynchronizingObject屬性為當(dāng)前的窗體實(shí)例。首先它設(shè)定該定時(shí)器的SynchronizingObject屬性使其在功能上同System.Windows.Forms.Timer類(lèi)一樣。對(duì)于大部分功能,的確是這樣。當(dāng)操作系統(tǒng)通知System.Timers.Timer類(lèi)所允許的定時(shí)時(shí)間已過(guò)去,定時(shí)器使用SynchronizingObject.Begin.Invoke方法在一個(gè)線程上去執(zhí)行事件委托,該線程是創(chuàng)建SynchronizingObject的線程。事件處理函數(shù)將被阻塞直到UI線程能夠處理它。然而不像System.Windows.Forms.Timer類(lèi)一樣,該事件最終仍然能夠被引發(fā)。像你在Figure 2中看到的,當(dāng)UI線程不能夠處理時(shí)System.Windows.Forms.Timer不會(huì)引發(fā)事件,可是當(dāng)UI線程可用時(shí)System.Timers.Timer卻會(huì)排隊(duì)等候處理。

正如我早先提到的,VB.NET System.Timers.Timer類(lèi)成員非常類(lèi)似與System.Windows.Forms.Timer。最大的區(qū)別就在與System.Timers.Timer類(lèi)是對(duì)Win32可等待定時(shí)對(duì)象的一個(gè)包裝,并在工作者線程上產(chǎn)生一個(gè)時(shí)間片消失事件而不是在UI線程上產(chǎn)生一個(gè)時(shí)間標(biāo)記事件。時(shí)間片消失事件必須與一個(gè)同ElapsedEventHandler委托像匹配的事件處理函數(shù)相連接。事件處理函數(shù)接受一個(gè)ElapsedEventArgs類(lèi)型的參數(shù)。

除了標(biāo)準(zhǔn)的EventArgs成員,ElapsedEventArgs類(lèi)暴露了一個(gè)公共的SignalTime屬性,它包含了一個(gè)精確的VB.NET定時(shí)器時(shí)間片消失的時(shí)間。因?yàn)檫@個(gè)類(lèi)支持不同線程的訪問(wèn),除了時(shí)間消失事件所在的線程,應(yīng)該相信它的Stop方法能夠被其它線程所調(diào)用。這會(huì)潛在的導(dǎo)致消失事件被引發(fā)即使其Stop方法已經(jīng)被調(diào)用。你可以把SignalTime和Stop方法調(diào)用的時(shí)間進(jìn)行比較來(lái)解決這個(gè)問(wèn)題。

System.Timers.Timer也提供了AutoReset屬性來(lái)決定當(dāng)時(shí)間片消失事件引發(fā)后是繼續(xù)進(jìn)行還是只這一次。要記住在定時(shí)器開(kāi)始后重設(shè)間隔屬性會(huì)導(dǎo)致當(dāng)前計(jì)數(shù)為0。比如,設(shè)置了一個(gè)5秒的間隔,在間隔被改變?yōu)?0秒時(shí)3秒已經(jīng)過(guò)去了,那么下一個(gè)定時(shí)器事件將會(huì)在上一個(gè)定時(shí)器事件13秒后發(fā)生。

【編輯推薦】

  1. 實(shí)例講述VB.NET使用Log4Net
  2. 三分鐘學(xué)會(huì)VB.NET轉(zhuǎn)換形態(tài)
  3. VB.NET獲取硬盤(pán)信息四大法寶
  4. 講述VB.NET調(diào)用Excel的好處
  5. 簡(jiǎn)單例子概述VB.NET新窗體
責(zé)任編輯:田樹(shù) 來(lái)源: 賽迪網(wǎng)
相關(guān)推薦

2009-10-28 10:31:59

VB.NET Syst

2009-11-03 09:09:19

VB.NET類(lèi)

2010-01-11 16:04:10

VB.NET使用wit

2009-10-20 10:16:24

VB.NET COMB

2010-01-22 15:25:46

VB.NET Time

2009-10-28 10:42:02

VB.NET定時(shí)器編程

2009-10-28 10:58:34

VB.NET定時(shí)器事件

2009-10-23 13:10:14

VB.NET List

2009-10-12 13:54:22

VB.NET Data

2009-10-15 11:42:05

VB.Net賦值語(yǔ)句

2009-10-20 09:39:04

VB.NET Butt

2009-10-14 17:21:47

VB.NET定制Win

2009-10-13 14:42:30

VB.NET靜態(tài)成員

2010-01-18 18:20:49

VB.NET使用API

2009-10-12 14:32:40

VB.NET實(shí)現(xiàn)定時(shí)關(guān)

2009-11-02 16:30:29

VB.NET構(gòu)造器

2009-10-28 13:24:25

VB.NET文件

2010-01-14 15:44:17

VB.NET數(shù)據(jù)綁定

2009-11-10 16:20:25

VB.NET全局熱鍵

2009-10-29 11:26:28

VB.NET調(diào)用Web
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)