gpt4 book ai didi

c# - 这种编码风格会导致内存泄漏吗

转载 作者:太空狗 更新时间:2023-10-29 21:47:08 26 4
gpt4 key购买 nike

按照 MVVM 模式,我试图通过 View 连接子窗口的显示以响应来自 View 模型的请求。

使用 MVVM-Light Messenger,View 将注册请求以在 View 的构造函数中显示子窗口,如下所示:

InitializeComponent();
Messenger.Default.Register<EditorInfo>(this, (editorData) =>
{
ChildWindow editWindow = new EditWindow();
editWindow.Closed += (s, args) =>
{
if (editWindow.DialogResult == true)
// Send data back to VM
else
// Send 'Cancel' back to VM
};

editWindow.Show();
});

使用 Lambda 订阅 ChildWindow Closed 事件是否会导致垃圾回收问题。或者换句话说,editWindow 何时(如果有的话)变得未被引用,因此成为垃圾收集的候选对象。

最佳答案

editWindow 将保留对 this 的引用,但没有任何内容会引用 editWindow,因此它最终会被垃圾回收,并且对 this 的引用将被丢弃。所以它不应该导致任何内存泄漏...

如果您想确定不会有问题,您可以取消订阅该事件:

InitializeComponent();
Messenger.Default.Register<EditorInfo>(this, (editorData) =>
{
ChildWindow editWindow = new EditWindow();
EventHandler handler = (s, args) =>
{
editWindow.Closed -= handler;
if (editWindow.DialogResult == true)
// Send data back to VM
else
// Send 'Cancel' back to VM
};

editWindow.Closed += handler;

editWindow.Show();
});

关于c# - 这种编码风格会导致内存泄漏吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5487175/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com