2013-12-19 60 views
2

在Visual Studio 2013中進行調試時,我想知道由實現INotifyPropertyChanged的某個類(稱爲Publisher)發佈的事件PropertyChanged的訂閱者數量。如何訪問PropertyChanged事件的訂閱者?

我研究了一下,發現這應該可以調用GetInvocationList()並計算返回數組中的元素。所以我在我的代碼中設置斷點,並試圖把這種立即窗口稱爲Publisherpublisher的對象上:

publisher.PropertyChanged.GetInvocationList() 

不過,我得到這個錯誤信息:

The event 'System.ComponentModel.INotifyPropertyChanged.PropertyChanged' can only appear on the left hand side of += or -= 

我做了什麼錯? 我如何訪問PropertyChanged的用戶?

+0

http://stackoverflow.com/a/1129530/736079 – jessehouwing

+0

根據您嘗試調試的問題,內存分析器可能會告訴你你需要什麼。 –

回答

4

我該如何訪問訂購者PropertyChanged

你基本上沒有。事件只有支持訂閱和取消訂閱功能。

我研究了一下,發現這應該可能調用GetInvocationList()並計算返回數組中的元素。

這假設你可以得到底層委託字段 - 如果還有之一。有可能沒有 - 有很多方法可以實現事件,就像有很多方法可以實現一個屬性一樣。

基本上,你要求的是打破事件的封裝模型。儘管在某些使用反射的情況下可以解決這個問題,但您應該意識到您正在與系統的設計進行鬥爭。

請參閱我的文章events and delegates瞭解更多關於兩者之間的差異。

+0

我明白了,感謝您的文章鏈接。 – elnigno

1

你要求做的事情並不簡單。並沒有標準的方法來實現它 - 基本上你可以破解現有的實現,但解決方案不能保證在未來工作。

我設法讀取用戶到一個事件,這是項目的根網址:http://www.codinghelmet.com/?path=net/sysexpand/reflection

起點,從中可以找到我在那裏通過用戶迭代是尋找在這個AddMonitoredObject方法頁:http://www.codinghelmet.com/?path=net/sysexpand/reflection/source/dynevsubscr

希望這會有所幫助。但請記住,這個解決方案是一個破解。

+0

謝謝,但這對我的需求似乎有點矯枉過正。 – elnigno