Dot-Net

PropertyChangedEventManager 何時創建以及何時附加?

  • January 27, 2015

長話短說……這是在一個大型 WPF 項目中

我有一個實現INotifyPropertyChanged. 當我處理這個類時,我正在檢查它是否PropertyChangedEventHandler為空,如果沒有,將它執行到一個ListenerDetector記錄監聽器的類,這樣我們就可以追踪它們並清理洩漏。Patient 確實有一些屬性綁定到 WPF 元素以及使用它PropertyChanged來監視更改的其他對象。

處理完其他所有內容後,我的日誌結果如下:

日誌:患者仍然連接了以下偵聽器:-System.ComponentModel.PropertyChangedEventManager

問:什麼時候PropertyChangedEventManager創建的?

  • 創建患者時
  • 當 WPF 綁定到 Patient 屬性時
  • 還有一點。

如果Patient.PropertyChangedEventHandler設置為null並因此斷開連接,PropertyChangedEventManager是否有任何方法可以重新創建 Manager 並讓它Patient.PropertyChangedEventHandler再次收聽?請不要問為什麼會發生這種情況,這是一個緊張點:-(

PropertyChangedEventManagerWPF 創建,以支持綁定到任何實現INotifyPropertyChanged. 只要您綁定到任何實現INotifyPropertyChanged.

話雖如此,它是WeakEventManager模式的實現。雖然它仍然顯示附加的偵聽器,但請意識到此偵聽器是使用弱事件模式附加的。一旦發生完整的垃圾回收,這就會消失,因為它使用弱引用來保存訂閱。因此,此特定訂閱不應成為(長期)記憶體洩漏的原因。

引用自:https://stackoverflow.com/questions/7894294