Question

Je reçois cet avertissement de FxCop:

  

& "RestartForm" contient le champ "RestartForm.done" de type IDisposable: "ManualResetEvent". Modifiez la méthode Dispose sur 'RestartForm' pour appeler Dispose ou Close dans ce champ. & Quot;

Ok, je comprends ce que cela signifie et pourquoi c’est ce qui doit être fait ... Sauf que System.Windows.Forms.Form ne vous permet pas de remplacer .Close() ou .Dispose(), que faire? Actuellement, je cours avec cette solution:

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

Qui fonctionne comme prévu pour mon application ... Mais FxCop affiche toujours ce message. Suis-je couvert et puis-je l'ignorer en toute sécurité ou y a-t-il un autre moyen de le faire?

Était-ce utile?

La solution

Vous devez remplacer la Dispose méthode à partir de Form

En règle générale, cette option est automatiquement remplacée dans le fichier RestartForm.Designer.cs. Vous devez donc déplacer l'élément dans votre fichier de code afin de pouvoir ajouter le code que vous souhaitez ajouter sans qu'il soit réécrit par le concepteur.

Dans le fichier RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

Autres conseils

J'utilise cette méthode:)

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

Si RestartForm étend System.Windows.Forms.Form, vous devriez pouvoir remplacer Dispose (bool disposing). Vous devez correctement implémenter cela pour votre & Quot; RestartForm & Quot; classe pour disposer de vos objets d’exposition.

Cela devrait ressembler à:

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);
}

Vous devez redéfinir la méthode Dispose. Cette méthode provient du contrôle classe de base

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top