it-swarm.com.de

Wie erweitere ich die Dispose-Methode von WinForm?

Ich bekomme diese Warnung von FxCop:

"'RestartForm' enthält das Feld 'RestartForm.done' vom Typ IDisposable: 'ManualResetEvent'. Ändern Sie die Dispose-Methode für 'RestartForm', um Dispose oder Close für dieses Feld aufzurufen."

Ok, ich verstehe, was das bedeutet und warum dies getan werden muss ... Außer System.Windows.Forms.Form erlaubt es nicht, entweder .Close() oder .Dispose() zu überschreiben, also was tun? Momentan laufe ich mit dieser Lösung:

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

Was für meine Anwendung wie vorgesehen funktioniert ... Aber FxCop zeigt diese Meldung immer noch an. Bin ich versichert und kann ich das sicher ignorieren oder gibt es eine andere Möglichkeit, dies zu tun?

57

Sie müssen die Dispose-Methode von Form überschreiben.

Normalerweise wird dies in der Datei RestartForm.Designer.cs automatisch überschrieben. Sie müssen also die Dispose in Ihre Code-Datei verschieben, damit Sie den Code hinzufügen können, den Sie hinzufügen müssen, ohne dass der Designer sie neu schreibt.

In der RestartForm.cs

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    if (components != null)
    {
      components.Dispose();
    }

    // Dispose stuff here
  }

  base.Dispose(disposing);
}
95
heavyd

Ich benutze diese Methode :)

            Image bgImage = Image.FromFile(workingDir + "\\" + button.BackgroundImage);
            currentButton.Image = bgImage;
            currentButton.Disposed += (Object sndr, EventArgs evnt) => bgImage.Dispose();
7
AlexTheo

Wenn RestartForm System.Windows.Forms.Form erweitert, sollten Sie Dispose (bool disposing) überschreiben können. Sie sollten dies für Ihre Klasse "RestartForm" ordnungsgemäß implementieren, um Ihre IDisposables zu entsorgen.

Es sollte so 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);
}
2
womp

Sie müssen die Dispose-Methode überschreiben. Diese Methode stammt von der Control -Basisklasse

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
0
Shay Erlichmen