首先,对不起我的英语。
我在代码中发现了内存泄漏,而且我不知道还需要做什么来解决它。
我正在所有代码中执行以下操作。我创建了一个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杀死?
提前谢谢!!!!
答案 0 :(得分:0)
您需要注销事件,如果不再需要它,请调用-=进行detectionInfo.onDetectionSaved