我收到这样的警告从FxCop的:

  

“‘RestartForm’包含字段‘RestartForm.done’是IDisposable的类型的:‘ManualResetEvent的’更改上‘RestartForm’Dispose方法调用Dispose或在此字段关闭”

好吧,我明白这意味着什么,以及为什么这是什么需要做......除了System.Windows.Forms.Form不允许您覆盖要么.Close().Dispose(),所以做什么?目前我使用此解决方案运行:

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

其工作方式是为我的应用程序...但FxCop的仍然显示此消息。我有没有佣金和我可以放心地忽略它,或有另一种方式我应该这样做呢?

有帮助吗?

解决方案

您需要重写从DisposeForm方法

通常,这在RestartForm.Designer.cs文件被自动覆盖,所以你需要移动处理到您的代码文件,以便您可以添加你需要而不会被设计师改写添加任何代码。

在RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

其他提示

我用这个方法:)

            Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
            currentButton.Image = bgImage;
            currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();

如果RestartForm延伸System.Windows.Forms.Form中,你应该能够重写的Dispose(布尔处置)。你应该正确地实现这为贵“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);
}

您需要重写Dispose方法,该方法来自控制基类

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top