是System.Windows.Forms.Application.Run(form);要求form.Dispose()?

时间:2012-09-24 17:03:34

标签: winforms

根据MSDN

  

如果使用表格显示表单,将自动调用Dispose   显示方法。如果使用另一种方法,如ShowDialog或表单   永远不会显示,你必须在你的内部打电话给自己   应用

如果我通过

发布表单会怎样?

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

关闭表单可以继续执行。如果我在块之后调用form.ShowDialogue(),它会抛出一个ObjectDisposedException。可以肯定的是,在通过form.Dispose()发布表单时是否需要致电Application.Run(),或者这样做是否有利有弊?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

发布后不久,我在MSDN

的另一个区域找到了答案
  

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