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

5
在VB .NET中,当您调用RaiseEvent X()时,处理事件X的函数是异步还是同步处理的。我曾经认为RaiseEvent和事件处理是同步的,除非明确在另一个线程上创建。不过,有人告诉我这不是这样的。
2个回答

7

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


2

我刚刚也进行了一些测试...

(该句中的英文原句已被翻译)
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秒钟
我的处理程序 - 醒来
某个函数 - 事件之后


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接