多线程
VB语言的一大弱点就是缺乏编写自由线程(free-threaded)程序的能力。在.net Framework中,所有语言共享CRL(Common Runtime Library,公共运行库),也就是说,你可以用VB.net、C#或其它.NET语言编写同样的程序。
System.Threading namespace定义了线程类。我们只需要引入System.Threading namespace,即可使用线程类。
System.Threading.Thread类提供线程对象,可以使用Thread类创建或破坏线程。
创建线程
使用Thread类的实体创建一个新线程,然后用Thread.Start方法开始执行线程。线程构造器接受一个参数,该参数指明你要在线程中执行的procedure。在下例中,我想在oThread1(Thread类的一个实体)的第二线程中执行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 |
然后,调用Thread.Start()开始线程:
oThread1.Start()
下面的代码创建两个第二线程:
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 |
破坏线程
调用Abort方法来破坏(中止)一个线程。在调用Abort之前,确保用IsAlive判断线程处于活动状态。
If oThread1.IsAlive Then oThread1.Abort() End If |
暂停线程
可以使用Sleep方法来暂停线程执行。Sleep方法接受一个以毫秒为单位的参数,指明线程应当暂停多长时间。
下面的例子让线程暂停1秒钟:
oThread2.Sleep(1000) |
你也可以使用Suspend和Resume方法来挂起和继续线程执行。
设定线程优先级
Thread类的Priority属性用于设定线程优先级。该属性可以设置为Normal,AboveNormal,BelowNormal,Highest和Lowest。如:
oThread2.Priority = ThreadPriority.Highest |
线程与Apartment
使用ApartmentState属性设置线程的apartment类型,该属性值可以为STA,MTA或是Unknown[2]:
oThread.ApartmentState = ApartmentState.MTA
MTS意味着可以使用多线程模式,而STA则只能是单线程执行。
Public Enum ApartmentState { STA = 0, MTA = 1, Unknown = 2, } |