.net PropertyChangedEventManager是何时创建的,何时附加?

.net PropertyChangedEventManager是何时创建的,何时附加?,.net,wpf,memory-leaks,inotifypropertychanged,.net,Wpf,Memory Leaks,Inotifypropertychanged,长话短说……这是一个大型WPF项目 我有一个类“Patient”,它实现了INotifyPropertyChanged。当我处理这个类时,我正在检查属性changedeventhandler是否为空,如果不是,则将其运行到一个侦听器检测器类,该类记录侦听器,以便我们可以跟踪它们并清除泄漏。Patient确实有一些绑定到WPF元素的属性,以及使用其PropertyChanged监视更改的其他对象 处理完所有其他内容后,我的日志结果如下: 日志:患者仍然连接了以下侦听器: -System.Compo

长话短说……这是一个大型WPF项目

我有一个类“Patient”,它实现了
INotifyPropertyChanged
。当我处理这个类时,我正在检查
属性changedeventhandler
是否为空,如果不是,则将其运行到一个
侦听器检测器
类,该类记录侦听器,以便我们可以跟踪它们并清除泄漏。Patient确实有一些绑定到WPF元素的属性,以及使用其
PropertyChanged
监视更改的其他对象

处理完所有其他内容后,我的日志结果如下:

日志:患者仍然连接了以下侦听器: -
System.ComponentModel.PropertyChangedEventManager

问题: 什么时候创建
属性ChangedEventManager

  • 创建患者时
  • 当WPF绑定到患者属性时
  • 还有一点

如果
Patient.PropertyChangedEventHandler
设置为
null
,因此与
PropertyChangedEventManager
断开连接,是否有办法重新创建管理器并让它再次收听
Patient.PropertyChangedEventHandler
?请不要问为什么会发生这种情况,这是这里的一个紧张点:-(

WPF创建了
属性更改开发管理器
,以支持绑定到实现
inotifPropertyChanged
的任何类。只要绑定到实现
inotifPropertyChanged
的任何类,就会创建并使用它

也就是说,这是该模式的一个实现。虽然它仍然显示连接的侦听器,但要意识到此侦听器是使用连接的。这将在完全垃圾收集发生后立即消失,因为它使用弱引用来保存订阅。因此,此特定订阅不应成为(长期)内存泄漏