多線程
VB語言的一大弱點就是缺乏編寫自由線程(free-threaded)程序的能力。在.NET Framework中,所有語言共享CRL(Common Runtime Library,公共運行庫),也就是說,你可以用VB.NET、C#或其它.NET語言編寫同樣的程序。
System.Threading namespace定義了線程類。我們只需要引入System.Threading namespace,即可使用線程類。
System.Threading.Thread類提供線程對象,加入收藏 可以使用Thread類創(chuàng)建或破壞線程。
創(chuàng)建線程
使用Thread類的實體創(chuàng)建一個新線程,然后用Thread.Start方法開始執(zhí)行線程。線程構(gòu)造器接受一個參數(shù),該參數(shù)指明你要在線程中執(zhí)行的procedure。在下例中,我想在oThread1(Thread類的一個實體)的第二線程中執(zhí)行SecondThread過程:
oThread1 = New Thread(AddressOf SecondThread)
SecondThread procedure looks like below:
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
然后,調(diào)用Thread.Start()開始線程:
oThread1.Start()
下面的代碼創(chuàng)建兩個第二線程:
Imports System
Imports System.Threading
Module Module1
Public oThread1 As Thread
Public oThread2 As Thread
Sub Main()
oThread1 = New Thread(AddressOf SecondThread)
oThread2 = New Thread(AddressOf ThirdThread)
oThread1.Start()
oThread2.Start()
End Sub
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
Public Sub ThirdThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine("A" + i.ToString())
Next
End Sub
End Module
破壞線程
調(diào)用Abort方法來破壞(中止)一個線程。在調(diào)用Abort之前,確保用IsAlive判斷線程處于活動狀態(tài)。
If oThread1.IsAlive Then
oThread1.Abort()
End If
暫停線程
可以使用Sleep方法來暫停線程執(zhí)行。Sleep方法接受一個以毫秒為單位的參數(shù),指明線程應當暫停多長時間。
下面的例子讓線程暫停1秒鐘:
oThread2.Sleep(1000)
你也可以使用Suspend和Resume方法來掛起和繼續(xù)線程執(zhí)行。
設定線程優(yōu)先級
Thread類的Priority屬性用于設定線程優(yōu)先級。該屬性可以設置為Normal,AboveNormal,BelowNormal,Highest和Lowest。如:
oThread2.Priority = ThreadPriority.Highest
線程與Apartment
使用ApartmentState屬性設置線程的apartment類型,該屬性值可以為STA,MTA或是Unknown[2]:
oThread.ApartmentState = ApartmentState.MTA
MTS意味著可以使用多線程模式,而STA則只能是單線程執(zhí)行。
Public Enum ApartmentState
{
STA = 0,
MTA = 1,
Unknown = 2,
}
VB語言的一大弱點就是缺乏編寫自由線程(free-threaded)程序的能力。在.NET Framework中,所有語言共享CRL(Common Runtime Library,公共運行庫),也就是說,你可以用VB.NET、C#或其它.NET語言編寫同樣的程序。
System.Threading namespace定義了線程類。我們只需要引入System.Threading namespace,即可使用線程類。
System.Threading.Thread類提供線程對象,加入收藏 可以使用Thread類創(chuàng)建或破壞線程。
創(chuàng)建線程
使用Thread類的實體創(chuàng)建一個新線程,然后用Thread.Start方法開始執(zhí)行線程。線程構(gòu)造器接受一個參數(shù),該參數(shù)指明你要在線程中執(zhí)行的procedure。在下例中,我想在oThread1(Thread類的一個實體)的第二線程中執(zhí)行SecondThread過程:
oThread1 = New Thread(AddressOf SecondThread)
SecondThread procedure looks like below:
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
然后,調(diào)用Thread.Start()開始線程:
oThread1.Start()
下面的代碼創(chuàng)建兩個第二線程:
Imports System
Imports System.Threading
Module Module1
Public oThread1 As Thread
Public oThread2 As Thread
Sub Main()
oThread1 = New Thread(AddressOf SecondThread)
oThread2 = New Thread(AddressOf ThirdThread)
oThread1.Start()
oThread2.Start()
End Sub
Public Sub SecondThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine(i.ToString())
Next
End Sub
Public Sub ThirdThread()
Dim i As Integer
For i = 1 To 10
Console.WriteLine("A" + i.ToString())
Next
End Sub
End Module
破壞線程
調(diào)用Abort方法來破壞(中止)一個線程。在調(diào)用Abort之前,確保用IsAlive判斷線程處于活動狀態(tài)。
If oThread1.IsAlive Then
oThread1.Abort()
End If
暫停線程
可以使用Sleep方法來暫停線程執(zhí)行。Sleep方法接受一個以毫秒為單位的參數(shù),指明線程應當暫停多長時間。
下面的例子讓線程暫停1秒鐘:
oThread2.Sleep(1000)
你也可以使用Suspend和Resume方法來掛起和繼續(xù)線程執(zhí)行。
設定線程優(yōu)先級
Thread類的Priority屬性用于設定線程優(yōu)先級。該屬性可以設置為Normal,AboveNormal,BelowNormal,Highest和Lowest。如:
oThread2.Priority = ThreadPriority.Highest
線程與Apartment
使用ApartmentState屬性設置線程的apartment類型,該屬性值可以為STA,MTA或是Unknown[2]:
oThread.ApartmentState = ApartmentState.MTA
MTS意味著可以使用多線程模式,而STA則只能是單線程執(zhí)行。
Public Enum ApartmentState
{
STA = 0,
MTA = 1,
Unknown = 2,
}