どのように私はWinフォームのDisposeメソッドを拡張していますか?
質問
私は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();
、あなたは(廃棄ブール値)処分を上書きすることができるはずです。あなたは正しく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);
}
あなたはDisposeメソッドをオーバーライドする必要が、この方法は、
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}