杀死UserControl WPF时出现问题

时间:2018-11-14 09:46:52

标签: c# wpf

首先,对不起我的英语。

我在代码中发现了内存泄漏,而且我不知道还需要做什么来解决它。

我正在所有代码中执行以下操作。我创建了一个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();
};

我正在尝试销毁OnClose回调中所有元素和回调以及“ UserControl”内容中的所有内容,并从树中删除DragItem实例(“窗口”),然后调用垃圾收集器……它消失了从可见的内容开始,我可以正常地与界面进行交互,但是UserControl内容背后的代码仍在工作。.有时我有一些背景任务,例如“上传文件”,并且此过程仍在工作,没有被杀死。

我还有什么想念的?如何在WPF中将其他UserControl中的UserControl杀死?

提前谢谢!!!!

1 个答案:

答案 0 :(得分:0)

您需要注销事件,如果不再需要它,请调用-=进行detectionInfo.onDetectionSaved

更多信息在这里:Why and How to avoid Event Handler memory leaks?