我有一个无模式的形式。当用户完成它并且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();
}
无模式表格在不再需要时清理自己的指导是什么?
答案 0 :(得分:1)
事实证明,您甚至 无法在无模式表单上呼叫Dispose
。来自MSDN:
Form.Close Method
当表单关闭时,在对象中创建的所有资源都是 关闭,表格处理。您可以阻止关闭表单 在运行时通过处理Closing事件并设置 Cancel的CancelEventArgs属性作为参数传递 到您的事件处理程序。如果您要关闭的表单是启动表单 您的申请结束了。
表单未在关闭上处理时的两个条件是:
- 它是多文档界面(MDI)应用程序的一部分,表单不可见
- 您已使用ShowDialog显示表单。
醇>在这些情况下,您需要手动调用Dispose进行标记 所有表单的垃圾收集控件。
所以回答我的问题,“我的无模式形式处理自己会有什么好时机?”
答案:从不