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?

War es hilfreich?

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top