Pergunta

Estou recebendo este aviso de FxCop:

" 'RestartForm' contém campo 'RestartForm.done' que é do tipo IDisposable:. 'ManualResetEvent' Alterar o método Dispose em 'RestartForm' para chamar Dispose ou Fechar neste campo"

Ok, eu entendo o que isso significa e por que isso é o que precisa ser feito ... Exceto System.Windows.Forms.Form não permitem substituir quer .Close() ou .Dispose(), então o que fazer? Atualmente eu estou correndo com esta solução:

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

Que funciona como pretendido para a minha candidatura ... Mas FxCop ainda mostra esta mensagem. Am I cobertas e eu posso ignorá-la com segurança, ou há outra maneira que eu deveria estar fazendo isso?

Foi útil?

Solução

Você precisa substituir o método Dispose de Form

Normalmente, isso é automaticamente substituído no arquivo RestartForm.Designer.cs, portanto, será necessário para mover a dispor em seu arquivo de código para que você pode adicionar o código que você precisa adicionar sem que seja reescrito pelo designer.

Nos RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

Outras dicas

Eu uso este método:)

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

Se RestartForm estende System.Windows.Forms.Form, você deve ser capaz de substituir Dispose (bool disposing). Você deve implementar adequadamente esse para sua classe "RestartForm" de dispor de seus IDisposables.

Ele deve ser parecido:

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

Você precisa substituir o método Dispose, este método vem do controle classe base

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top