学习VB.NET时,经常会遇到VB.NET线程同步问题,这里将介绍VB.NET线程同步问题的解决方法,在这里拿出来和大家分享一下。
VB.NET线程同步
在VB.NET线程同步方面,VB.NET提供了几个方法。在上面的平方例子中,你要与执行计算的VB.NET线程同步,以便等待它执行完并且得到结果。另一个例子是,如果你在其它线程中排序一个数组,那么在使用该数组前,你必须等待该处理完成。为了进行这些同步,VB.NET提供了SyncLock声明和 Thread.Join方法。
SyncLock可得到一个对象引用的***锁,只要将该对象传送给SyncLock就行了。通过得到这个***锁,你可以确保多个线程不会访问共享的数据或者在多个线程上执行的代码。要得到一个锁,可使用一个较为便利的对象--与每个类关联的System.Type对象。System.Type对象可通过使用GetType方法得到:
- Public Sub CalcSquare()
- SyncLock GetType(SquareClass)
- Square = Value * Value
- End SyncLock
- End Sub
另一个是Thread.Join方法,它可让你等待一个特定的时间,直到一个线程完成。如果该线程在你指定的时间前完成了,Thread.Join将返回 True,否则它返回False。在平方的例子中,如果你不想使用触发事件的方法,你可以调用Thread.Join的方法来决定计算是否完成了。代码如下所示:
- Private Sub Button1_Click(ByVal sender As System.Object,
_ByVal e As System.EventArgs) Handles Button1.Click- Dim oSquare As New SquareClass()
- t = New Thread(AddressOf oSquare.CalcSquare)
- oSquare.Value = 30
- t.Start()
- If t.Join(500) Then
- MsgBox(oSquare.Square)
- End If
- End Sub
对于这种方法,要注意的是处理事件的过程,在这个例子中的是SquareEventHandler,将运行在产生该事件的线程中。它并不是运行在表格执行的线程中。
【编辑推荐】