在C#中触发事件是否阻止当前线程执行?

Osc*_*ros 5 c# events multithreading event-handling

如果我要解雇这个事件:

var handler = OnMyEvent;

if (handler != null)
{
    handler(some_info);
}
Run Code Online (Sandbox Code Playgroud)

然后执行线程将等待,直到所有suscriber方法返回以继续执行后行:

handler(some_info);
Run Code Online (Sandbox Code Playgroud)

或者"在另一个线程中"触发事件,这意味着它会自动转到下一行之后handler(some_info)

Sti*_*gar 10

事件在同一个线程上触发,它将一直阻塞直到它们完成.当然,事件处理代码本身可以产生另一个线程并立即返回,但这是完全不同的事情.

另请注意,像桌面应用程序(如Windows窗体应用程序)中的按钮单击等事件会放在消息队列中,并且会一次触发一个.即,如果您按一个按钮然后按另一个按钮,第二个按钮事件将不会触发,直到第一个按钮事件完成.表单也不会重新绘制,并且"没有响应",因为绘制表单也是一个事件.