IDisisable Winform

时间:2009-01-16 14:46:10

标签: .net winforms idisposable generated-code

在Winform上实现IDisposable的最佳做法是什么?

  • 我有一个扩展System.Windows.Forms.Form
  • 的对话框
  • 生成的designer.cs已经包含虚拟Dispose(bool)方法的实现
  • 我的表单有一个手动添加的字段,用于实现IDisposable

理想情况下,我可以在生成的代码中挂钩Dispos(bool)覆盖来处理手动添加的IDisposable对象。有关如何正确执行此操作的任何建议吗?

感谢。

斯科特

3 个答案:

答案 0 :(得分:5)

您可以将Dispose实现移出.designer.cs和.cs。

答案 1 :(得分:2)

但是,那么你的字段需要是一个Component(实现IComponent接口或类似的东西)。 这不是有点矫枉过正吗?

也许您可以将事件处理程序附加到Disposing事件,并将字段放在该事件处理程序中?

(或者只是将它们添加到Dispose方法 - 我认为这不会有问题,因为afaik,Dispose方法中的代码不会重新生成... 理想情况下,Dispose方法实现不应该在* .designer.cs类中......)。

答案 2 :(得分:1)

我取消注册表格的designer.cs

中的Dispose方法中的任何事件
    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        _frmFind.RaiseFindEvent -= _frmFind_RaiseFindEvent;
        base.Dispose(disposing);
    }