vb.net中如何結(jié)束一個線程
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名注冊、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、尖扎網(wǎng)站維護、網(wǎng)站推廣。
一般而言,如果您想終止一個線程,您可以使用System.Threading.Thread類的Abort方法. 例如:
Dim worker As ThreadStart = New ThreadStart(AddressOf workerthreadmethod)
Dim t As Thread = New Thread(worker)
t.Start()
MessageBox.Show("Wait for a while for the thread to start.")
MessageBox.Show(t.ThreadState.ToString())
t.Abort()
MessageBox.Show(t.ThreadState.ToString())
t.Join()
MessageBox.Show(t.ThreadState.ToString())
當(dāng)然,在調(diào)用Abort方法后,線程并不是立刻終止,要等線程的所有finally快中的代碼完成后才會完全終止. 所以在主線程中可以用Join方法來同步,當(dāng)線程還未完全終止時,t.Join()將處于等待,直到t線程完全結(jié)束后再繼續(xù)執(zhí)行后面的語句。
Abort方法是會導(dǎo)致線程跳出一個異常錯誤的,你需要在代碼中捕獲該異常。下面是一個比較完整的VB.NET線程例子:
Imports System
Imports System.Threading
Public Class MyTestApp
Public Shared Sub Main()
Dim t As New Thread(New ThreadStart(AddressOf MyThreadMethod))
'Start the thread
t.Start()
MsgBox("Are you ready to kill the thread?")
'Kill the child thread and this will cause the thread raise an exception
t.Abort()
' Wait for the thread to exit
t.Join()
MsgBox("The secondary thread has terminated.")
End Sub
Shared Sub MyThreadMethod()
Dim i As Integer
Try
Do While True
Thread.CurrentThread.Sleep(1000)
Console.WriteLine("This is the secondary thread running.")
Loop
Catch e As ThreadAbortException
MsgBox("This thread is going to be terminated by the Abort method in the Main function")
End Try
End Sub
End Class
Thread.Abort()方法用來永久銷毀一個線程,而且將拋出ThreadAbortException異常。使終結(jié)的線程可以捕獲到異常但是很難控制恢復(fù),僅有的辦法是調(diào)用Thread.ResetAbort()來取消剛才的調(diào)用,而且只有當(dāng)這個異常是由于被調(diào)用線程引起的異常。因此,A線程可以正確的使用Thread.Abort()方法作用于B線程,但是B線程卻不能調(diào)用Thread.ResetAbort()來取消Thread.Abort()操作。
簡單回答:
1、當(dāng)前來說,編程與運行環(huán)境合適的情況下,VB.net與VB都有實現(xiàn)多線程的可能。
2、VB、VB.net的最基本的概念,是調(diào)用系統(tǒng)的接口進行編程,只要系統(tǒng)提供“多線程”的功能調(diào)用,它們就能實現(xiàn)多線程。
3、VB注意于面向用戶,面向任務(wù),其高級的一些程序?qū)崿F(xiàn)需要直接調(diào)用win的API,VB實現(xiàn)多線程的例子也可以在網(wǎng)絡(luò)上搜索到。
一、關(guān)于VB、VB.net的相關(guān)知識:
1、編程指的是用人類能理解的語言來編寫指令集,并通過專用的編譯軟件或環(huán)境來轉(zhuǎn)化這些指令,使得這些指令能讓計算機識別,從而控制計算機做人類需要進行的工作。
2、也就是說無論是VB.NET還是VB它們都只是“人類能理解的語言”,它們通過專用的編譯軟件或環(huán)境來轉(zhuǎn)化這些指令,進而操作電腦。
3、進一步特化到VB上去說。VB基于VB的運行庫,它的運行庫又基于win的API((Application Programming Interface,應(yīng)用程序編程接口)是一些預(yù)先定義的函數(shù)),也就是說,VB的很多(多到90%以上)的功能是直接基于調(diào)用windows提供的一些基本接口函數(shù)。
4、VB.net有什么不同呢,它基于.net運行庫。什么 意思?這個意思就是,微軟發(fā)現(xiàn)win的API不夠用了,不好用了,就打算在windows上加裝點東西,讓它有更多的接口函數(shù)。但要注意的是,多數(shù)情況下,這些接口比win的API的效率要低一些。在win7及以后的版本的win中,已經(jīng)自含了.net運行庫。
5、順便說,為什么很多人會發(fā)現(xiàn)win7的運行速度看起來要比xp慢呢,個人認為就是因為調(diào)用的是.net的接口來實現(xiàn)的,.net就是比API的慢。當(dāng)然了,.net的功能上要比xp原有的API的功能強。
6、VB與VB.net在語法上是非常近似的,只是因為Visual Studio的版本不同,后期的Visual Studio已不提供簡純的VB了,注意它們的不同主要是后臺核心調(diào)用的理念上的不同。
Sub Main()
Dim thr As Thread
For Pi As Integer=0 To 4 //啟用5線程
MulParams =Pi vbTab sFile vbTab dFile vbTab 1 vbTab DelN vbTab cr vbTab cg vbTab cb vbTab IndexI
GlobalParamas(pi)=MulParams .Split(vbTab)
thr=New Thread(AddressOf MyMulThreadCaller)
thr.Start() //啟動多線程進程
Application.DoEvents
Next
End Sub