在C#中触发事件阻止当前线程执行?
问题描述:
如果我触发事件:在C#中触发事件阻止当前线程执行?
var handler = OnMyEvent;
if (handler != null)
{
handler(some_info);
}
然后将执行线程等待,直到所有会员键方法返回继续行后执行:
handler(some_info);
?
或者事件在另一个线程中被触发,这意味着它会自动转到handler(some_info)
之后的下一行?
答
事件在同一个线程中被触发,它会阻塞,直到它们完成。当然,事件处理代码本身可以产生另一个线程并立即返回,但这完全是另一回事。
另请注意,诸如Windows Forms应用程序之类的桌面应用程序中的按钮点击事件会置于消息队列中,并且每次都会触发一个事件。即如果你按下一个按钮,然后按下另一个按钮,第二个按钮事件将不会触发,直到第一个按钮事件完成。此外,表单不会重新绘制,并且将“不响应”,因为绘制表单也是一个事件。
答
在引发它们的线程中触发事件。
我知道这是一个古老的答案,但它有可能规避这种情况吗? – Brandon 2014-09-29 18:20:58
环绕什么? – Stilgar 2014-09-30 12:39:47
在同一个线程上触发事件。如果我有20个处理者参加一个活动,为什么我希望他们顺序开火? – Brandon 2014-09-30 13:22:40