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

执行结果如下:
在这里插入图片描述
说明,事件处理函数完全在触发它的工作者线程中执行,为此事件不可用于线程间的同步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值