Dot-Net
PropertyChangedEventManager 何時創建以及何時附加?
長話短說……這是在一個大型 WPF 項目中
我有一個實現
INotifyPropertyChanged. 當我處理這個類時,我正在檢查它是否PropertyChangedEventHandler為空,如果沒有,將它執行到一個ListenerDetector記錄監聽器的類,這樣我們就可以追踪它們並清理洩漏。Patient 確實有一些屬性綁定到 WPF 元素以及使用它PropertyChanged來監視更改的其他對象。處理完其他所有內容後,我的日誌結果如下:
日誌:患者仍然連接了以下偵聽器:-
System.ComponentModel.PropertyChangedEventManager問:什麼時候
PropertyChangedEventManager創建的?
- 創建患者時
- 當 WPF 綁定到 Patient 屬性時
- 還有一點。
如果
Patient.PropertyChangedEventHandler設置為null並因此斷開連接,PropertyChangedEventManager是否有任何方法可以重新創建 Manager 並讓它Patient.PropertyChangedEventHandler再次收聽?請不要問為什麼會發生這種情況,這是一個緊張點:-(
由
PropertyChangedEventManagerWPF 創建,以支持綁定到任何實現INotifyPropertyChanged. 只要您綁定到任何實現INotifyPropertyChanged.話雖如此,它是WeakEventManager模式的實現。雖然它仍然顯示附加的偵聽器,但請意識到此偵聽器是使用弱事件模式附加的。一旦發生完整的垃圾回收,這就會消失,因為它使用弱引用來保存訂閱。因此,此特定訂閱不應成為(長期)記憶體洩漏的原因。