gpt4 book ai didi

winforms - System.Windows.Forms.Application.Run(form); 是否执行需要 form.Dispose() 吗?

转载 作者:行者123 更新时间:2023-12-02 06:28:59 26 4
gpt4 key购买 nike

根据MSDN

Dispose will be called automatically if the form is shown using the Show method. If another method such as ShowDialog is used, or the form is never shown at all, you must call Dispose yourself within your application.

如果我通过以下方式启动表单会发生什么

System.Windows.Forms.Application.Run(form);?

关闭表单允许继续执行。如果我在 block 之后调用 form.ShowDialogue() ,它会抛出 ObjectDisposeException 。可以肯定的是,通过 Application.Run() 启动表单时是否需要调用 form.Dispose() ,或者这样做有什么优点或缺点?

最佳答案

ApplicationContext 类控制 UI 线程的生命周期。它的 ExitThread() 方法启动退出内部消息循环的关闭。当您使用 Application.Run(Form) 重载时,Winforms 使用 ApplicationContext(Form) 构造函数创建一个 ApplicationContext。它订阅了表单的 HandleDestroyed 事件,事件处理程序调用 ExitThread()。

因此,生命周期纯粹取决于表单的 native Windows 窗口是否处于事件状态。销毁该窗口的两种常见方法是用户单击窗口的“关闭”按钮或您的应用程序调用 Close 或 Dispose 方法。无论哪种方式,表单都会自动处理。此后表单对象就死了,尝试恢复它会抛出 ODE。

关于winforms - System.Windows.Forms.Application.Run(form); 是否执行需要 form.Dispose() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12569630/

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