gpt4 book ai didi

c# - WinForms 和事件处理程序

转载 作者:行者123 更新时间:2023-11-30 22:32:24 26 4
gpt4 key购买 nike

默认情况下,当您创建一个 Win-Form 应用程序时,这是由 visual studio 生成的用于处理 Form 的代码。

protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}

这就够了吗?或者我应该取消注册所有事件,以便垃圾收集器准备好收集控件?

        if (disposing && (components != null))
{
myButton.OnClick-= MyFunction; //may be here!!
// ... all events used
components.Dispose();

}

最佳答案

表单必须注销所有实体的所有事件,这些事件将超过表单。表单是否从与表单具有相同生命周期的实体注销事件并不重要。无论出于何种原因,正常的原则似乎是“不要担心注销事件,除非它很重要”。我认为让所有订阅事件的对象在 Dispose 上取消订阅它们会更干净。 , 但不幸的是,vb.net 和 C# 都没有提供任何甚至远程干净的方法来完成这个。具有实现 IDisposable 的依赖项, 可以将构造包装在一个例程中,该例程会将新创建的项目添加到稍后要清理的事物列表中。然后,只需调用 Dispose 即可执行所有必要的清理工作。在列表中的所有内容上。不幸的是,从 .net 的角度来看,没有很好的方法来编写一个通用例程,它会同时订阅一个事件并返回一个 Action<>。 , IDisposable ,或其他可用于取消订阅的此类对象。

关于c# - WinForms 和事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8734028/

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