2011-04-02 293 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()運行時,它會阻止您繼續完成代碼。

爲了向你自己證明這一點,編寫一個控制檯應用程序來做到這一點,有一堆用戶的事件,並觀察發生了什麼。