代码之家  ›  专栏  ›  技术社区  ›  Josh Smeaton

事件处理程序是否异步处理?

  •  5
  • Josh Smeaton  · 技术社区  · 15 年前

    在vb.net中,当调用raiseEvent x()时,是处理异步或同步处理的事件x的函数。我觉得raiseEvent和事件处理是同步的,除非在另一个线程上明确创建。不过,我被告知不然。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Andrew Hare    15 年前

    默认情况下,事件是同步引发的。自从 MulticastDelegates 旨在支持异步调用,可以异步调用事件调用列表中的委托,但这不是默认行为。

        2
  •  2
  •   Josh Smeaton    15 年前

    我也做了一些测试…

    Public Sub MyHandler() Handles Complete
        MsgBox("My Handler - Beginning 5 second sleep")
        Threading.Thread.Sleep(5000)
        MsgBox("My Handler - Awoken")
    End Sub
    
    
    Public Sub SomeFunction()
        MsgBox("Some function - Raising Event")
        RaiseEvent Complete()
        MsgBox("Some function - After Event")
    End Sub
    

    输出:
    一些函数引发事件
    我的处理程序-开始5秒睡眠
    我的处理人-醒来
    一些功能-事件后