新聞中心
之前我們將了關(guān)于定時器System.Windows.Forms.Timer類的講解,今天我們大家來看和它類似的另一個VB.NET System.Threading 。這個定時器類來自System.Threading名字空間。我愿意說這是所有定時器類中最好的一個,但這會引起誤導(dǎo)。舉一個例子,我驚訝的發(fā)現(xiàn)對于駐留在VB.NET System.Threading名字空間的這個類天生就不是線程安全的。(很明顯,這不意味著它不能以線程安全的方式使用)。這個類的可編程接口同其它兩個類也不一致,它稍微有點(diǎn)麻煩。

專注于為中小企業(yè)提供成都網(wǎng)站制作、成都做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)馬鞍山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
不像我開始描述的兩個定時器類,VB.NET System.Threading有四個重載構(gòu)造函數(shù),就像下面這樣:
- public Timer(TimerCallback callback, object state, long dueTime, long period);
- public Timer(TimerCallback callback, object state, UInt32 dueTime, UInt32 period);
- public Timer(TimerCallback callback, object state, int dueTime, int period);
- public Timer(TimerCallback callback, object state, TimeSpan dueTime, TimeSpan period);
第一個參數(shù)(callback)要求一個TimerCallback的委托,它指向一個方法,該方法具有下面的結(jié)構(gòu):
- public void TimerCallback(object state);
第二個參數(shù)(state)可以為空或者是包含程序規(guī)范信息的對象。在每一個定時器事件被調(diào)用時該state對象作為一個參數(shù)傳遞給你的定時回調(diào)函數(shù)。記住定時回調(diào)功能是在一個工作者線程上執(zhí)行的,所以你必須確保訪問state對象的線程安全。
第三個參數(shù)(dueTime)讓你定義一個引發(fā)初始定時器事件的時間。你可指定一個0立即開始定時器或者阻止定時器自動的開始,你可以使用VB.NET System.Threading.Timeout.Infinite常量。
第四個參數(shù)(period)讓你定義一個回調(diào)函數(shù)被調(diào)用的時間間隔(毫秒)。給該參數(shù)定義一個0或者Timeout.Infinite可以阻止后續(xù)的定時器事件調(diào)用。
一旦構(gòu)造函數(shù)被調(diào)用,你仍然可以通過Change方法改變dueTime和period。該方法有下面四種重載形式:
- public bool Change(int dueTime, int period);public bool Change(uint dueTime, uint period);
- public bool Change(long dueTime, long period);public bool Change(TimeSpan dueTime, TimeSpan period);
下面是我在例子程序中用到的開始和停止該定時器的代碼:
- //Initialize the timer to not start automatically...System.Threading.Timer tmrThreadingTimer = newSystem.Threading.
Timer(new TimerCallback(tmrThreadingTimer_TimerCallback), null, System.Threading.Timeout.Infinite, 1000);- //Manually start the timer...tmrThreadingTimer.Change(0, 1000);
- //Manually stop the timer...tmrThreadingTimer.Change(Timeout.Infinte, Timeout.Infinite);
正如你所期望的那樣,通過選擇VB.NET System.Threading.Timer類運(yùn)行例子程序會產(chǎn)生同你看到的System.Timers.Timer類一樣的輸出結(jié)果。因?yàn)門imerCallback功能也是在工作者線程上被調(diào)用,沒有一個跳動被跳過(假設(shè)有工作者線程可用)。Figure 5顯示了例子程序的輸出結(jié)果。
不像System.Timers.Timer類,沒有與SynchronizingObject相對應(yīng)的屬性被提供。任何請求訪問UI控件的操作都必須通過控件的Invoke或BeginInvoke方法被列集
當(dāng)前文章:講解定時器VB.NETSystem.Threading類
本文來源:http://www.fisionsoft.com.cn/article/ccshjee.html


咨詢
建站咨詢
