Wie erweitere ich ein Dispose-Methode des Windows Forms?
Frage
Ich erhalte diese Warnung von FxCop:
„‚RestartForm‘enthält Feld‚RestartForm.done‘, die von IDisposable Typ:..‚Manual‘die Dispose-Methode ändern auf‚RestartForm‘Entsorgen oder Schließen auf diesem Gebiet zu nennen“
Ok, ich verstehe, was das bedeutet, und warum das ist, was getan werden muss ... Außer System.Windows.Forms.Form
Ihnen nicht erlaubt, entweder .Close()
oder .Dispose()
außer Kraft zu setzen, so was zu tun ist? Derzeit mit dieser Lösung Ich bin mit:
private void RestartForm_FormClosing(object sender, FormClosingEventArgs e)
{
done.Set();
done.Close();
}
Welche funktioniert wie für meine Anwendung gedacht ... Aber FxCop zeigt immer noch diese Meldung. Bin ich bedeckt und kann ich es einfach ignorieren, oder gibt es eine andere Art, wie ich dies tun sollte?
Lösung
Sie müssen die Dispose
Methode von Form
außer Kraft zu setzen
Normalerweise wird diese automatisch in der RestartForm.Designer.cs Datei überschrieben, so dass Sie die Entsorgung in den Code-Datei müssen bewegen, so dass Sie hinzufügen können, was Code, den Sie ohne hinzuzufügen, müssen sie von dem Designer neu geschrieben werden.
In der RestartForm.cs
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
// Dispose stuff here
}
base.Dispose(disposing);
}
Andere Tipps
Ich benutze diese Methode:)
Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
currentButton.Image = bgImage;
currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();
Wenn RestartForm System.Windows.Forms.Form erstreckt, sollten Sie in der Lage sein Dispose (bool disposing) außer Kraft zu setzen. Sie sollten dies richtig implementieren für Ihre „RestartForm“ Klasse Ihres IDisposables zu entsorgen.
Es sollte wie folgt aussehen:
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);
}
Sie müssen die Dispose-Methode außer Kraft zu setzen, diese Methode kommt von der Steuerung Basisklasse
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}