gpt4 book ai didi

c# - 在 wpf 中关闭窗口时是否必须取消订阅事件?

转载 作者:太空狗 更新时间:2023-10-30 00:25:01 24 4
gpt4 key购买 nike

标题说明了一切,在我的窗口(不是主窗口)构造函数中我有

EventAggregator.OnUserLoggedIn += OnUserLoggedIn;
EventAggregator.OnUserLoggedOff += OnUserLoggedOff;

有区别吗

this.Close()

EventAggregator.OnUserLoggedIn -= OnUserLoggedIn;
EventAggregator.OnUserLoggedOff -= OnUserLoggedOff;
this.Close()

我读到关闭窗口会处理所有非托管资源,这些事件被视为托管还是非托管?

最佳答案

如果有的话,这些事件是托管资源(不过我不确定您是否可以调用事件资源)。

是的,您应该从子窗口(而不是主窗口,因为这无关紧要)取消事件处理程序,否则您可能会遇到内存泄漏,因为垃圾收集器将无法拾取那些仍然具有引用的对象。

检查 this blog有关内存泄漏和事件处理程序的更多信息:

A classic leak common to all .NET applications, and a common oversight by developers. If you create an event handler to handle events occurring in some other object then, if you don't clear the link when you've finished, an unwanted strong reference will be left behind.

关于c# - 在 wpf 中关闭窗口时是否必须取消订阅事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751448/

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