【问题标题】:IDisposable WinformIDisposable Winform
【发布时间】:2009-01-16 14:46:10
【问题描述】:
在 Winform 上实现 IDisposable 的最佳做法是什么?
- 我有一个扩展 System.Windows.Forms.Form 的对话框
- 生成的 Designer.cs 已包含虚拟 Dispose(bool) 方法的实现
- 我的表单手动添加了一个实现 IDisposable 的字段
理想情况下,我可以在生成的代码中挂钩 Dispos(bool) 覆盖,以释放手动添加的 IDisposable 对象。有关如何正确执行此操作的任何建议?
谢谢。
斯科特
【问题讨论】:
标签:
.net
winforms
idisposable
generated-code
【解决方案1】:
您可以将该 Dispose 实现移出 .designer.cs 和您的 .cs。
【解决方案2】:
但是,你的字段需要是一个组件(实现 IComponent 接口或类似的东西)。
会不会有点矫枉过正?
也许您可以将事件处理程序附加到 Disposing 事件,并在该事件处理程序中处理您的字段?
(或者只是将它们添加到 Dispose 方法中 - 我认为这不会有问题,因为 afaik,Dispose 方法中的代码不会重新生成......
理想情况下,Dispose 方法的实现不应该在 *.designer.cs 类中......)。
【解决方案3】:
我在表单的 Designer.cs 中的 Dispose 方法中取消注册任何事件
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
_frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
base.Dispose(disposing);
}