2011-04-02 70 views
2

比方说,我有一个事件Tick我称之为:当你给他们打电话时,事件是阻塞还是非阻塞?

public class Test 
{ 
    public event Action Tick; 

    public void Test() 
    { 
     Tick(); 
     Console.WriteLine("Tick Finished"); 
    } 
} 

如果我已经预订Tick事件的负载,将这个线程运行Test()的操作被阻塞,直到他们都被称为或不它异步执行此操作?

+0

类似的问题:http://stackoverflow.com/questions/1049844/are-public-events-asynchronous-do-they-execute-on-a-separate-thread – HABJAN 2011-04-02 14:08:02

+0

@HABJAN:谢谢 – 2011-04-02 14:10:13

+0

事件阻塞(这意味着它们与调用它们的线程同步运行)。但他们只是委托,所以你可以使用'BeginInvoke'使它们异步。查看更多信息[这里](http://msdn.microsoft.com/en-us/magazine/cc301332.aspx)。 – 2011-04-02 14:11:55

回答

4

所有事件都被阻止。线程执行将被阻塞,直到执行了注册到该事件的所有事件处理程序。

+0

@Eurgene我很好奇,如果你收到3个事件会发生什么,它会处理它们,直到它完成? – Rushino 2013-01-19 14:37:08

+0

@Rushino查找multicastdelegate – nin 2013-02-14 15:01:55

1

Tick()运行时,它会阻止您继续完成代码。

为了向你自己证明这一点,编写一个控制台应用程序来做到这一点,有一堆用户的事件,并观察发生了什么。