どのように私はWinフォームのDisposeメソッドを拡張していますか?

StackOverflow https://stackoverflow.com/questions/1052147

  •  20-08-2019
  •  | 
  •  

質問

私はFxCopのからこの警告を取得しています:

  

" 'RestartForm' はIDisposableを型であるフィールド 'RestartForm.done' が含ま:。。 'ManualResetEvent' をこのフィールドに廃棄またはCloseを呼び出すために 'RestartForm' にDisposeメソッドを変更して"

[OK]を、私はこれが何を意味するのか理解しSystem.Windows.Forms.Formはそう何をすべきかを、.Close()あなたがいずれかの上書きを許可し.Dispose()たりしない以外は、なぜこれが...行う必要がある何ですか?現在、私はこのソリューションを実行しているよ。

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

自分のアプリケーションのために意図したとおりに動作します...しかし、FxCopのは、まだこのメッセージを示しています。私はカバーされていると私は安全にそれを無視することができ、または私はこれを実行しなければならないもう一つの方法は何ですか?

役に立ちましたか?

解決

あなたはDispose

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

一般的に、これは自動的に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を拡張する場合は、

、あなたは(廃棄ブール値)処分を上書きすることができるはずです。あなたは正しくIDisposablesの処分は、「RestartForm」クラスのためにこれを実装する必要があります。

これは、次のようになります。

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);
}
scroll top