文章
博客 网店

 VB.NET异步编程 - 事件不可用于线程同步


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

执行结果如下:



说明,事件处理函数完全在触发它的工作者线程中执行,为此事件不可用于线程间的同步。


芯艺工作室    蒙ICP备06005492号
Copyright© 2004-2023 ChipArt Studio All Rights Reserved