Проблемы с убийством UserControl WPF - PullRequest
0 голосов
/ 14 ноября 2018

прежде всего извините за мой английский.

Я обнаружил утечку памяти в своем коде, и я не знаю, что еще мне нужно сделать, чтобы ее решить.

Я делаю следующее во всем своем коде.Я создал UserControl для имитации окна с именем DragItem .у этого есть только XML с заголовком и границей, чтобы прикрепить его контент.Контент является еще одним UserControl в качестве параметра.Поэтому, когда я вызываю новое «окно», я делаю это следующим образом:

var detectionInfo = new DetectionInfoPage(_projectPage.searchControl, SelectedBookmark._Object, _projectId, SelectedBookmark);
var window = new DragItem(_mainTask, _mainTask.ContentMainTask)
{
    Name = "dragDetectionInfo",
    Title = "Detection Info",
    UserControl = detectionInfo,
    ModalWidth = 800,
    ModalHeight = 500
};
detectionInfo.Initialize();
window.Show();

detectionInfo.onDetectionSaved += (o, bookmark) =>
{
    SearchBookmarks();
};
window.OnClose += (o, b) =>
{
    detectionInfo?.Destroy();
    detectionInfo = null;
    _mainTask.ContentMainTask.Children.Remove(window);
    GC.Collect();
};

Я пытаюсь уничтожить все элементы и обратные вызовы, а также весь контент «UserControl» в обратном вызове OnClose и удаляюИз дерева создается экземпляр DragItem («окно»), и, кроме того, вызывается сборщик мусора ... Он исчезает из видимого содержимого, и я могу нормально взаимодействовать с интерфейсом, но код содержимого UserControl все еще работает ... и иногда яесть задние задачи, например «загрузка файлов», и этот процесс все еще работает, не убит.

Что еще мне не хватает?Как я могу УБИТЬ UserControls внутри других пользовательских контролей в WPF ??

Заранее спасибо !!!!

1 Ответ

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

Вам нужно отменить регистрацию событий, вызывать - = для обнаруженияInfo.onDetectionSaved, когда вам это больше не нужно

дополнительная информация здесь: Почему и как избежать утечек памяти в обработчике событий?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...