Отмена подписки на событие FrameworkElement при удалении - PullRequest
0 голосов
/ 18 ноября 2018

У меня есть прикрепленное свойство, которое я использую для нескольких элементов управления в моем приложении.Это свойство подписывается на статическое событие и имеет обработчик события, в котором изменяются некоторые свойства элемента управления, с которым связано присоединенное свойство.

Проблема заключается в том, что некоторые из этих элементов управления воссоздаются (например, они являются частьюItemsControl или Window, который может быть закрыт и повторно открыт) и затем сохранен в памяти через присоединенное свойство.В моей версии WinForms я подписался на событие disposed, чтобы элемент управления знал, когда оно было удалено, а затем отменил подписку на обработчики событий.Однако у WPF нет такого события.Unloaded, который вызывается при его временном удалении (например, через вкладку изменения элемента управления вкладками).

Итак, как я могу удалить эти ссылки на элементы управления, когда элементы управления должны быть удалены, чтобы избежать утечек памяти?В настоящее время, если я обновляю одну из моих страниц, память, используемая моим приложением, продолжает увеличиваться.

1 Ответ

0 голосов
/ 18 ноября 2018

Я нашел решение, которое, кажется, работает.Вместо сохранения ссылки на элемент управления я установил ее в объекте WeakReference, чтобы сборщик мусора мог ее собрать.

...