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."
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();
}
Ce 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?
Vous devez remplacer la méthode Dispose
à partir de Form
En règle générale, cela est automatiquement remplacé 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 devez ajouter sans qu'il soit réécrit par le concepteur.
Dans le RestartForm.cs
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
// Dispose stuff here
}
base.Dispose(disposing);
}
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 dispose). Vous devriez correctement implémenter ceci pour que votre classe "RestartForm" élimine vos IDisposables.
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 de la classe Control base
protected override void Dispose(bool disposing)
{
if (disposing)
{
event.Dispose();
}
base.Dispose(disposing);
}