删除时取消订阅FrameworkElement事件

时间:2018-11-18 17:13:53

标签: c# wpf events memory-leaks

我有一个附加属性,可以在整个应用程序的一系列控件中使用。该属性订阅静态事件,并具有事件处理程序,在该事件处理程序中,附加属性绑定到的控件的某些属性被修改。

问题在于其中的某些控件会被重新创建(例如,它们是ItemsControl或Window的一部分,可以关闭并重新打开它们),然后通过附加属性将其保存在内存中。在我的WinForms版本中,我订阅了处置事件以使控件知道何时将其删除,然后取消订阅事件处理程序。但是,WPF没有这样的事件。卸载,当它被临时删除时会被调用(例如通过选项卡控件更改选项卡)。

那么,当应删除控件以避免内存泄漏时,如何删除这些控件引用?目前,如果我刷新页面之一,则我的应用程序使用的内存会不断增加。

1 个答案:

答案 0 :(得分:1)

我找到了一个可行的解决方案。我没有保存对控件的引用,而是将其设置在WeakReference对象中,以允许垃圾收集器收集它。