在 Winform 上实现 IDisposable 的最佳实践是什么?
- 我有一个扩展 System.Windows.Forms.Form 的对话框
- 生成的 Designer.cs 已经包含虚拟 Dispose(bool) 方法的实现
- 我的表单手动添加了一个实现 IDisposable 的字段
理想情况下,我将能够在生成的代码中挂接到 Dispos(bool) 覆盖以处置手动添加的 IDisposable 对象。关于如何正确执行此操作的任何建议?
谢谢。
斯科特
在 Winform 上实现 IDisposable 的最佳实践是什么?
理想情况下,我将能够在生成的代码中挂接到 Dispos(bool) 覆盖以处置手动添加的 IDisposable 对象。关于如何正确执行此操作的任何建议?
谢谢。
斯科特
您可以将该 Dispose 实现移出 .designer.cs 和您的 .cs。
但是,那么您的字段需要是一个组件(实现 IComponent 接口或类似的东西)。会不会有点矫枉过正?
也许您可以将事件处理程序附加到 Disposing 事件,并在该事件处理程序中处理您的字段?
(或者只是将它们添加到 Dispose 方法中 - 我认为这不会有问题,因为 afaik,Dispose 方法中的代码不会重新生成......理想情况下,Dispose 方法实现不应该在 * .designer.cs 类...)。
我在表单的 Designer.cs 中的 Dispose 方法中取消注册任何事件
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
_frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
base.Dispose(disposing);
}