私は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はまだこのメッセージを表示します。私はそれをカバーして安全に無視できますか、またはこれを行うべき別の方法がありますか?
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を拡張する場合、Dispose(bool disposing)をオーバーライドできます。 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メソッドをオーバーライドする必要があります。このメソッド Controlから取得 基本クラス
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}