這幾天忙著開發(fā)一個競賽軟件,要求一個前端的顯示,幕后*控前端顯示給競賽者,這就要用到多線程、Socket技術(shù)及委托技術(shù)。于是在網(wǎng)上找了一些關(guān)于Socket技術(shù)的資料,加上學(xué)過的線程的一點(diǎn)知識,開始我的整合編程。深知自己一直都對VB沒怎么興趣的,感覺他不是真正的編程,VB是易學(xué),易懂,易理解,想想還是花點(diǎn)時間學(xué)下,感覺有一天會有用的,于是一時心血來潮,憑著自己埋頭苦干的邊學(xué)東西邊做軟件,還好有其他編程軟件的一點(diǎn)經(jīng)驗(yàn)吧,沒走偏了,一直都很想寫個文章做個紀(jì)念,最令我深刻的、學(xué)到最有用的東西也就是多線程、Socket技術(shù)、委托技術(shù)。現(xiàn)在開始我的VB編程:
第一步:什么是多線程?如果一個窗體里創(chuàng)建一個線程,他就是一個多線程,是兩個線程的多線程,窗體顯示及控件的管理本身就有一個線程控件,叫UI線程(自己理解應(yīng)該是用戶界面的線程吧!!呵呵),是主線程,而創(chuàng)建的線程則是子線程。那么什么是Socket呢?Socket就是套接字,通過Socket,有可以作為Server端的Socket,也有作為Client端的Socket,服務(wù)端開啟一個子線程來監(jiān)聽客戶端發(fā)來的所有信息,并可以發(fā)送回信息,實(shí)現(xiàn)數(shù)據(jù)雙向通信。聊天軟件很多都是基于Socket的編寫出來的。好了,什么是委托技術(shù)呢?簡單的說是就有一個人,他沒有能力完成想要做的事,出錢委讓給別人去完成,像某某公司經(jīng)理要求你開發(fā)個競賽軟件,他本身沒有能力去完成這樣的事,所以出錢讓你去完成。好了,明白了是什么后,接下來寫下一些代碼吧!!!!!
第二步:多線程例子
VB中多線程可以傳值
Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 對象名(或類名).方法)
對象名(或是類名).屬性 = 值 '通過這樣可以實(shí)現(xiàn)線程傳參
.......
th.start()
也可以返回值(通過委托技術(shù)實(shí)現(xiàn)),在做競賽軟件時,遇到一個問題,當(dāng)在子線程里面去New 一個Form或是控件時,都會使窗體出現(xiàn)假死,于是在網(wǎng)上找了一些資料及查MSDN后才知道,原來子線程是沒有能力去*控UI線程的控件,這里只能用委托技術(shù),--------------------------這個是很好的一個說明==========呵呵=========
Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 方法名1)
th.start()
Delegate Sub DelegateHandler(ByVal 參數(shù) as String) '聲明一個委托
private Sub 方法名1()
dim dh as DelegateHandler = New DelegateHandler(AddressOf 方法名2)
me.invoke(dh, new Object()...{"value"})
End Sub
private Sub 方法名2(ByVal str as String)
'被委托給的方法 ,處理委托后的數(shù)據(jù)
End Sub
第三步:Socket技術(shù)例子
(1)服務(wù)器端
Socket是基于線程而創(chuàng)建的,在UI線程下創(chuàng)建子線程,線程方法中用一個死循環(huán)在監(jiān)聽客戶端的信息,第收到一信息后,委托給UI線程方法去處理。示例代碼:
'聲明一個線程
Dim t As System.Threading.Thread
t = New Thread(AddressOf WaitData)
t.Start()
第一步:什么是多線程?如果一個窗體里創(chuàng)建一個線程,他就是一個多線程,是兩個線程的多線程,窗體顯示及控件的管理本身就有一個線程控件,叫UI線程(自己理解應(yīng)該是用戶界面的線程吧!!呵呵),是主線程,而創(chuàng)建的線程則是子線程。那么什么是Socket呢?Socket就是套接字,通過Socket,有可以作為Server端的Socket,也有作為Client端的Socket,服務(wù)端開啟一個子線程來監(jiān)聽客戶端發(fā)來的所有信息,并可以發(fā)送回信息,實(shí)現(xiàn)數(shù)據(jù)雙向通信。聊天軟件很多都是基于Socket的編寫出來的。好了,什么是委托技術(shù)呢?簡單的說是就有一個人,他沒有能力完成想要做的事,出錢委讓給別人去完成,像某某公司經(jīng)理要求你開發(fā)個競賽軟件,他本身沒有能力去完成這樣的事,所以出錢讓你去完成。好了,明白了是什么后,接下來寫下一些代碼吧!!!!!
第二步:多線程例子
VB中多線程可以傳值
Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 對象名(或類名).方法)
對象名(或是類名).屬性 = 值 '通過這樣可以實(shí)現(xiàn)線程傳參
.......
th.start()
也可以返回值(通過委托技術(shù)實(shí)現(xiàn)),在做競賽軟件時,遇到一個問題,當(dāng)在子線程里面去New 一個Form或是控件時,都會使窗體出現(xiàn)假死,于是在網(wǎng)上找了一些資料及查MSDN后才知道,原來子線程是沒有能力去*控UI線程的控件,這里只能用委托技術(shù),--------------------------這個是很好的一個說明==========呵呵=========
Dim th as System.Threading.Thread
th = New System.Threading.Thread(Addressof 方法名1)
th.start()
Delegate Sub DelegateHandler(ByVal 參數(shù) as String) '聲明一個委托
private Sub 方法名1()
dim dh as DelegateHandler = New DelegateHandler(AddressOf 方法名2)
me.invoke(dh, new Object()...{"value"})
End Sub
private Sub 方法名2(ByVal str as String)
'被委托給的方法 ,處理委托后的數(shù)據(jù)
End Sub
第三步:Socket技術(shù)例子
(1)服務(wù)器端
Socket是基于線程而創(chuàng)建的,在UI線程下創(chuàng)建子線程,線程方法中用一個死循環(huán)在監(jiān)聽客戶端的信息,第收到一信息后,委托給UI線程方法去處理。示例代碼:
'聲明一個線程
Dim t As System.Threading.Thread
t = New Thread(AddressOf WaitData)
t.Start()