VB.NET中事件不可用于线程同步
在windows消息机制中,接收消息到一个时发生一个事件,这个消息可以在不同的线程甚至进程之间发送并产生事件,但在.net中事件没有了那个意义,事件机制完全在单一个线程内执行,下面是验证代码:
Imports System.Threading
Module Module1
Private m_Thread As MyThread
Sub Main()
thread_event(0) '打印主线程
m_Thread = New MyThread
AddHandler m_Thread.MyEvent, AddressOf thread_event '安装事件处理函数
m_Thread.Init()
m_Thread.Wait() '等待线程结束
End Sub
Sub thread_event(ByVal stp As Integer)'事件处理函数
Console.WriteLine(stp.ToString() + " 线程ID:" + Thread.CurrentThread.ManagedThreadId.ToString() + Environment.NewLine)
End Sub
End Module
Class MyThread
Private m_Thread As Thread
Public Event MyEvent(ByVal stp As Integer) '定义事件
Public Sub Init()
m_Thread = New Thread(AddressOf ThreadRun)
m_Thread.Start()
End Sub
'工作者线程执行函数
Private Sub ThreadRun()
Dim i As Integer
i = 0
While (True)
Thread.Sleep(5000)
RaiseEvent MyEvent(i)
i += 1
If i > 5 Then Exit While
End While
End Sub
Public Sub Wait()
m_Thread.Join()
End Sub
End Class
执行结果如下:
说明,事件处理函数完全在触发它的工作者线程中执行,为此事件不可用于线程间的同步。
|
|