vb.net創(chuàng)建線程、多線程和破壞線程

字號:

多線程
    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,
    }