高手論聲明VB.NET事件
VB.NET經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,很多用戶(hù)都很了解VB.NET事件了,這里我發(fā)表一下個(gè)人理解,和大家討論討論。調(diào)用了線(xiàn)程的start方法,并不能確保其中的方法馬上執(zhí)行完,而要得到數(shù)據(jù)訪(fǎng)問(wèn)的結(jié)果又必須等其中的方法執(zhí)行完畢。
#T#如果在運(yùn)行線(xiàn)程后采用循環(huán)查詢(xún)的方法顯然影響了交互性,事件是從線(xiàn)程方法返回?cái)?shù)據(jù)的好方法。只要在線(xiàn)程方法所在的類(lèi)中定義一個(gè)事件,在線(xiàn)程方法中發(fā)出事件,而在窗體類(lèi)中生成代理。線(xiàn)程是操作系統(tǒng)分配處理器時(shí)間的基本單元,線(xiàn)程可以在單個(gè)執(zhí)行線(xiàn)程執(zhí)行的同時(shí)運(yùn)行多個(gè)活動(dòng),支持搶先多任務(wù)處理的操作系統(tǒng)可以創(chuàng)建多個(gè)線(xiàn)程并通過(guò)時(shí)間片輪轉(zhuǎn)的方式使它們同時(shí)運(yùn)行。在需要良好用戶(hù)交互的應(yīng)用以及與網(wǎng)絡(luò)和數(shù)據(jù)庫(kù)進(jìn)行通訊的應(yīng)用中,使用多線(xiàn)程能提供良好的交互體驗(yàn),能對(duì)用戶(hù)的要求做出快速的反應(yīng)。
首先在dealDataBase類(lèi)聲明后加進(jìn)VB.NET事件:
- Public Class dealDataBase
- Public Event GetDataComplete(ByVal e As DtatTable)
- …
- End Class
在類(lèi)dealDataBase的GetDataFromDataBase()方法中加入發(fā)出事件的代碼,放在m_sqlDataAdapter.Fill(m_table)后:
- Public sub GetDataFromDataBase()
- …
- m_sqlDataAdapter.Fill(m_table)
- RasiseEvent GetDataComplete(m_table)
- …
- End Sub
下面在窗體類(lèi)中生成代理
- Private Sub dealData (ByVal e As DataTable)
- '處理數(shù)據(jù)表
- End Sub
在創(chuàng)建線(xiàn)程并運(yùn)行線(xiàn)程的代碼中進(jìn)行事件連接,事件連接代碼放在運(yùn)行線(xiàn)程前, dealDataBase類(lèi)實(shí)例化后:
- AddHandler myDB. GetDataComplete,AddressOf dealData
這樣,當(dāng)線(xiàn)程方法執(zhí)行完畢就會(huì)發(fā)出事件,而dealData方法會(huì)響應(yīng)VB.NET事件并做出處理。