2011-05-09 94 views
4

如果我触发事件:在C#中触发事件阻止当前线程执行?

var handler = OnMyEvent; 

if (handler != null) 
{ 
    handler(some_info); 
} 

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

handler(some_info); 

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

回答

10

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

另请注意,诸如Windows Forms应用程序之类的桌面应用程序中的按钮点击事件会置于消息队列中,并且每次都会触发一个事件。即如果你按下一个按钮,然后按下另一个按钮,第二个按钮事件将不会触发,直到第一个按钮事件完成。此外,表单不会重新绘制,并且将“不响应”,因为绘制表单也是一个事件。

+0

我知道这是一个古老的答案,但它有可能规避这种情况吗? – Brandon 2014-09-29 18:20:58

+0

环绕什么? – Stilgar 2014-09-30 12:39:47

+0

在同一个线程上触发事件。如果我有20个处理者参加一个活动,为什么我希望他们顺序开火? – Brandon 2014-09-30 13:22:40

2

在引发它们的线程中触发事件。

相关问题