69

FxCopから次の警告が表示されます。

「「RestartForm」には、IDisposableタイプのフィールド「RestartForm.done」が含まれています:「ManualResetEvent」。「RestartForm」のDisposeメソッドを変更して、このフィールドでDisposeまたはCloseを呼び出します。」

わかりました。これが何を意味するのか、なぜこれを実行する必要があるのか​​を理解しています...またはSystem.Windows.Forms.Formをオーバーライドできない場合を除いて、どうすればよいですか?現在、私はこのソリューションを実行しています:.Close().Dispose()

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

これは私のアプリケーションの意図どおりに機能します...しかし、FxCopはまだこのメッセージを表示します。私はカバーされていますか、それを安全に無視できますか、それともこれを行うべき別の方法がありますか?

4

4 に答える 4

128

Disposeメソッドをオーバーライドする必要がありますForm

通常、これは 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(boll 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 に答える