从表单清除对象,何时何地?

我有一个简单的Windows窗体应用程序。 在表单上我有一个自定义类,它有自己的Dispose方法。

所以问题是我什么时候应该这样称呼?

FormClosed事件(即Form1_FormClosed)是否正确执行此操作? 或者我应该为表单编写自定义Dispose方法?

奖励积分:一旦关闭,可以重新开放吗? (显然,如果它可以,FormClosed是错误的方式去!)

谢谢。

需要一点点手术。 在“解决方案资源管理器”窗口中打开表单旁边的节点。 双击表单的Designer.cs文件。 找到Dispose()方法并将其剪切并粘贴到表单的源代码文件中。 现在,您可以更改它并在表单类中的一次性对象引用上调用Dispose方法。

抢先:不,可以编辑设计器文件的这一部分。 只有#region中的部分是禁止的。

应将实现IDisposable的控件添加到窗体的System.ComponentModel.IContainer components属性中。

在处理表格时,该集合中的所有一次性用品将被处理掉。 (所有双关语意)

编辑要看到这一点,只需在表单上删除一个Timer,然后查看生成的代码。

如果你有理由然后form closing你应该validationbool A pplication.IsExiting

如果你不想破坏表单,那么在form closing取消关闭并执行Hide() 。 然后可以使用Show()重新打开表单。 整个表单状态将保持不变。

如果您没有充分的理由,请不要致电处置。

如果对象包含重物(图像,数据库连接等),请在完成后立即调用。

在关闭时调用dispose会强制您在打开时重新加载资源。 如果您在关闭之后不销毁任何重要项目并保留参考,则可以重新打开表单。

通过’definition’close和’dispose’做同样的事情(并关闭windows / forms)。 .net框架中的每次紧密调用都只是在内部调用dispose。

@评论

我使用了一个大约40MB位图的应用程序。 调用那些真正帮助内存绑定机器的人。 使用问题中给出的信息调用处理对象是不可能的。 称之为’仅仅因为’是不好的,称之为因为设计师做得更糟糕。