2009-11-14 93 views
0

我試圖從暴露私有對象的一些事件,包含我創建的對象中,它看起來像編譯器是滿意的:事件是否可以用作事件偵聽器?

private WindowUpdateServer _windowUpdateServer; 

public event WindowUpdateHandler WindowUpdated; 

public RecieveWindowFramesManager() { 

    _windowUpdateServer = new WindowUpdateServer(); 

    _windowUpdateServer.ExistingWindowUpdated += WindowUpdated; // ExistingWindowUpdated is a WindowUpdateHandler 
} 

但RecieveWindowFramesManager後初始化_windowUpdateServer.ExistingWindowUpdated = = null。

我在這裏錯過了什麼 - 它似乎應該工作?

值得注意的是,RecieveWindowFramesManager初始化後,我將一個事件監聽器附加到WindowUpdated,但它永遠不會被調用(即使_windowUpdateServer.ExistingWindowUpdated被觸發)。

回答

4

我會做這樣的事情:

public event WindowUpdateEventHandler WindowUpdated 
{ 
    add{ _windowUpdateServer.ExistingWindowUpdated += value; } 
    remove{ _windowUpdateServer.ExistingWindowUpdated -= value; } 
} 

它有一些問題,如果你實際使用sender參數的事件處理程序,雖然,它會指向內部對象而不是您從中獲取事件的對象。

+1

不錯!即使我的解決方案更優雅! – 2009-11-14 19:19:43

+0

我只是試過這個,它完美的作品。真的很好的解決方案。 – InvertedAcceleration 2009-11-15 10:26:45

6

我不確定,但我認爲這只是從WindowUpdated事件中分配那些處理程序,它是在+ =操作發生時設置的。由於它是一個構造函數,所以列表是空的。要做你想做的事情,爲ExistingWindowUpdated創建你自己的事件處理程序並從那裏觸發WindowUpdated事件。

+0

完美,謝謝你的好解釋。 – InvertedAcceleration 2009-11-14 14:39:37

+0

再次感謝您的解釋。 ArildF的解決方案在我的情況下工作得很好 - 所以我已經接受了他的回答,因爲它更合適。 – InvertedAcceleration 2009-11-15 10:28:53