【问题标题】: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);
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        相关资源
        最近更新 更多