Domanda

Ricevo questo avviso da FxCop:

  

" 'RestartForm' contiene il campo 'RestartForm.done' di tipo IDisposable: 'ManualResetEvent'. Modificare il metodo Dispose su 'RestartForm' per chiamare Dispose o Close in questo campo. & Quot;

Ok, capisco cosa significa e perché questo è ciò che deve essere fatto ... Tranne System.Windows.Forms.Form non ti consente di sostituire .Close() o .Dispose(), quindi cosa fare? Attualmente sto correndo con questa soluzione:

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

Che funziona come previsto per la mia applicazione ... Ma FxCop mostra ancora questo messaggio. Sono coperto e posso tranquillamente ignorarlo o c'è un altro modo in cui dovrei farlo?

È stato utile?

Soluzione

Devi sovrascrivere il metodo Dispose da Form

In genere, questo viene automaticamente sovrascritto nel file RestartForm.Designer.cs, quindi sarà necessario spostare lo smaltimento nel file di codice in modo da poter aggiungere qualsiasi codice necessario senza che venga riscritto dal designer.

In RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

Altri suggerimenti

Uso questo metodo :)

            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, dovresti essere in grado di sovrascrivere Dispose (eliminazione bool). Dovresti implementarlo correttamente per il tuo & Quot; RestartForm & Quot; classe per smaltire i tuoi IDisposable.

Dovrebbe apparire come:

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

Devi sovrascrivere il metodo Dispose, questo metodo proviene dal controllo classe base

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top