69

我收到了来自 FxCop 的警告:

“'RestartForm' 包含 IDisposable 类型的字段 'RestartForm.done':'ManualResetEvent'。将 'RestartForm' 上的 Dispose 方法更改为在此字段上调用 ​​Dispose 或 Close。”

好的,我明白这意味着什么,为什么这是需要做的......除了System.Windows.Forms.Form不允许你覆盖.Close()or .Dispose(),那该怎么办?目前我正在使用这个解决方案:

    private void RestartForm_FormClosing(object sender, FormClosingEventArgs e)
    {
        done.Set();
        done.Close();
    }

这适用于我的应用程序......但 FxCop 仍然显示此消息。我是否被覆盖了,我可以安全地忽略它,还是有另一种方式我应该这样做?

4

4 回答 4

128

您需要DisposeForm

通常,这会在 RestartForm.Designer.cs 文件中自动覆盖,因此您需要将 dispose 移动到代码文件中,以便您可以添加需要添加的任何代码,而无需设计器重写。

在 RestartForm.cs

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    if (components != null)
    {
      components.Dispose();
    }

    // Dispose stuff here
  }

  base.Dispose(disposing);
}
于 2009-06-27T05:43:37.270 回答
9

我用这个方法:)

            Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
            currentButton.Image = bgImage;
            currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();
于 2011-12-20T13:27:14.690 回答
2

如果 RestartForm 扩展 System.Windows.Forms.Form,您应该能够覆盖 Dispose(bool disposing)。你应该为你的“RestartForm”类正确地实现这个来处理你的 IDisposables。

它应该看起来像:

public override Dispose(bool disposing)
{
   if (disposing)
   {
       // Dispose was called from user code. Dispose of managed resources here.
       done.Dispose();
   }

   // Dispose of unmanaged resources here, and invoke base dispose.
   base.Dispose(disposing);
}
于 2009-06-27T05:38:23.330 回答
0

需要重写Dispose方法,该方法来自Control基类

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
于 2009-06-27T05:36:23.707 回答