什么是我的无模式形式处理自己的好时机?

时间:2012-02-24 21:54:49

标签: winforms idisposable

我有一个无模式的形式。当用户完成它并且Close时,不再需要表单(及其相关资源)。

正确的编程要求我处理任何实现IDisposable的东西(即我不能等待垃圾收集运行)。这包括我自己,一个WinForms Form

表单自行调用Dispose的最佳或有效时间是什么时候?

  

在“其他”语言中,您可以从表单中销毁表单   本身通过调用Release

void CloseButton(EventArgs e)
{
   this.Release();
}
     

此方法导致在每个实例后销毁表单   方法已返回(并且表单已处理所有待处理的消息)。

     

在这种“其他”语言中,调用 可怕的错误

void CloseButton(EventArgs e)
{
   this.Free();
}
     

因为我正在释放我正在运行一个方法的对象从我自己身下出来;   这会暂时导致访问冲突。

假设在致电时非常无效:

void CloseButton(EventArgs e)
{
    this.Dispose();
}

但也许打电话是安全的:

void FormClosed(EventArgs e)
{ 
   this.Dispose();
}

无模式表格在不再需要时清理自己的指导是什么?

1 个答案:

答案 0 :(得分:1)

事实证明,您甚至 无法在无模式表单上呼叫Dispose。来自MSDN:

  

Form.Close Method

     

当表单关闭时,在对象中创建的所有资源都是   关闭,表格处理。您可以阻止关闭表单   在运行时通过处理Closing事件并设置   CancelCancelEventArgs属性作为参数传递   到您的事件处理程序。如果您要关闭的表单是启动表单   您的申请结束了。

     

表单未在关闭上处理时的两个条件是:

     
      
  1. 它是多文档界面(MDI)应用程序的一部分,表单不可见
  2.   
  3. 您已使用ShowDialog显示表单。
  4.         

    在这些情况下,您需要手动调用Dispose进行标记   所有表单的垃圾收集控件。

所以回答我的问题,“我的无模式形式处理自己会有什么好时机?”

答案:从不