3

根据MSDN

如果使用 Show 方法显示表单,则会自动调用 Dispose。如果使用了其他方法(如 ShowDialog),或者根本不显示表单,则必须在应用程序中自己调用 Dispose。

如果我通过启动表单会发生什么

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

关闭表单允许继续执行。如果我在块之后调用 form.ShowDialogue() 它会抛出一个ObjectDisposedException. form.Dispose()可以肯定的是,在通过启动表单时我是否需要打电话,Application.Run()或者这样做有什么好处或坏处?

4

2 回答 2

4

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

所以生命周期完全取决于窗体的本机 Windows 窗口是否处于活动状态。销毁该窗口的两种常见方法是用户单击窗口的关闭按钮或您的应用程序调用 Close 或 Dispose 方法。无论哪种方式,表单都会自动处理。在此之后表单对象已死,试图恢复它会抛出 ODE。

于 2012-09-24T17:35:05.173 回答
1

发布后不久,我在MSDN的另一个区域找到了答案

Form 类的 Dispose 方法将在该方法返回之前被调用。

于 2012-09-24T17:06:51.013 回答