VB.NET线程构造器简析

来源:岁月联盟 编辑:exp 时间:2009-10-12

VB.NET有很多值得学习的地方,这里我们主要介绍VB.NET线程构造器,包括介绍调用Thread.Sleep方法等方面。

本文介绍在线程启动中,你可以通过线程对象的一个方法来控制它的状态。你可以通过调用Thread.Sleep方法来暂停一个线程的执行,这个方法可以接收一个整型值,用来决定线程休眠的时间。拿前面的例子来说,如果你想让列表项目增加的速度变慢,可以在其中放入一个sleep方法的调用:

  1. Private Sub BackgroundProcess()  
  2. Dim i As Integer = 1 
  3. Do While Tru  
  4. ListBox1.Items.Add("Iterations: " + i)  
  5. i += 1  
  6. Thread.CurrentThread.Sleep(2000)  
  7. Loop  
  8. End Sub 

CurrentThread是一个public static的属性值,可让你得到当前运行线程的一个引用。

你还可以通过调用Thread.Sleep (System.Threading.Timeout.Infinite)来让线程进入休眠状态,有点特别的是,这个调用的休眠时间是不确定的。要中断这个休眠,你可以调用Thread.Interrupt方法。

与休眠和中断类似的是挂起和恢复。挂起可让你暂停一个线程,直到另一个线程调用Thread.Resume为止。休眠和挂起的区别是,后者并不立刻让线程进入一个等待的状态,线程并不会挂起,直到.NET runtime认为现在已经是一个安全的地方来挂起它了,而休眠则会立刻让线程进入一个等待的状态。

最后要介绍的是Thread.Abort,它会停止一个线程的执行。在我们的那个简单例子中,如果要加入一个按钮来停止处理,很简单,我们只要调用Thread.Abort方法就行了,如下所示:

  1. Private Sub Button2_Click(ByVal sender As System.Object, 
    _ByVal e As System.EventArgs) Handles Button2.Clickt.Abort()  
  2. End Sub 

这就是多线程的强大之处。用户界面的响应很好,因为它运行在一个单独的线程中,而后台的处理运行在另外一个线程中。在用户按下取消按钮时,便会马上得到响应,并且停止处理。

上面的例子只是一个相当简单的应用。在编程时,你还需要使用到多线程的许多复杂特性。其中的一个问题是如何将程序的数据由VB.NET线程构造器传入或者传出,也就是说,对于放到另外一个线程中的过程,你既不能传参数给它,也不能由它返回值。这是由于你传入到VB.NET线程构造器的过程是不能拥有任何的参数或者返回值的。为了解决这个问题,可以将你的过程封装到一个类中,这样方法的参数就可使用类中的字段。

这里我们举一个简单的例子,如果我们要计算一个数的平方,即:

  1. Function Square(ByVal Value As Double) As Double  
  2. Return Value * Value  
  3. End Function