Надлежащая очистка пользовательских элементов управления WPF

Я думаю, что Apache XMLBeans обеспечивает функциональность, которая Вы после.

страница Wikipedia дает хороший обзор и использование в качестве примера.

21
задан Per Lundberg 26 July 2013 в 10:56
поделиться

3 ответа

Боюсь, что Dispatcher.ShutdownStarted действительно кажется единственным механизмом, который WPF предоставляет для удаления ресурсов в UserControls. (См. Очень похожий вопрос , который я задал некоторое время назад).

Другой способ решения проблемы - переместить все ваши одноразовые ресурсы (если это вообще возможно) из кода в отдельные классы (например, ViewModel при использовании шаблона MVVM). Затем на более высоком уровне вы можете обработать закрытие главного окна и уведомить все ViewModels через класс Messenger.

Я удивлен, что вы не получаете событие Dispatcher.ShutdownStarted. Прикреплены ли ваши UserControl к окну верхнего уровня в это время?

12
ответ дан 29 November 2019 в 21:32
поделиться

Интерфейс IDisposable не имеет (почти) никакого смысла в WPF, потому что механизм отличается от Winforms. В WPF вы должны помнить о визуальном и логическом дереве: это фундаментально.
Итак, любой визуальный объект обычно живет как потомок какого-то другого объекта. Основа механизма построения WPF - иерархическое присоединение визуального объекта, затем отсоединение и уничтожение, когда они бесполезны.

Думаю, вы можете проверить метод OnVisualParentChanged , открытый после UIElement : этот метод вызывается либо при присоединении визуального объекта, либо при его отсоединении. Это могло бы быть правильным местом для удаления неуправляемых объектов (сокетов, файлов и т. Д.).

10
ответ дан 29 November 2019 в 21:32
поделиться

В то время как другие предоставили вам действительно полезную информацию об этой проблеме, есть небольшая часть информации, которой вы, возможно, не располагаете, которая многое объясняет, почему нет IDisposable. По сути, WPF (и Silverlight) интенсивно использует WeakReferences - это позволяет вам ссылаться на объект, который GC все еще может собирать.

0
ответ дан 29 November 2019 в 21:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: