Pregunta

Recibo esta advertencia de FxCop:

  

" 'RestartForm' contiene el campo 'RestartForm.done' que es de tipo IDisposable: 'ManualResetEvent'. Cambie el método Dispose en 'RestartForm' para llamar a Dispose o Close en este campo. & Quot;

Ok, entiendo lo que esto significa y por qué esto es lo que hay que hacer ... Excepto que System.Windows.Forms.Form no le permite anular .Close() o .Dispose(), entonces, ¿qué hacer? Actualmente estoy ejecutando con esta solución:

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

Que funciona según lo previsto para mi aplicación ... Pero FxCop todavía muestra este mensaje. ¿Estoy cubierto y puedo ignorarlo con seguridad, o hay otra forma de hacerlo?

¿Fue útil?

Solución

Debe anular el método Dispose de Form

Normalmente, esto se reemplaza automáticamente en el archivo RestartForm.Designer.cs, por lo que deberá mover la disposición a su archivo de código para que pueda agregar el código que necesite sin que el diseñador lo vuelva a escribir.

En RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

Otros consejos

Yo uso este método :)

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

Si RestartForm extiende System.Windows.Forms.Form, debería poder anular Dispose (eliminación de bool). Debe implementar esto correctamente para su & Quot; RestartForm & Quot; clase para deshacerse de sus IDisposables.

Debería verse así:

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

Debe anular el método Dispose, este método proviene del Control clase base

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top