Вопрос

Я получаю это предупреждение от FxCop:

"'RestartForm' содержит поле 'RestartForm.done', имеющее тип IDisposable:"ManualResetEvent".Измените метод Dispose в 'RestartForm' на вызов Dispose или Close для этого поля ".

Хорошо, я понимаю, что это значит и почему это то, что нужно сделать...За исключением System.Windows.Forms.Form не позволяет вам переопределять ни то, ни другое .Close() или .Dispose(), так что же делать?В настоящее время я работаю с этим решением:

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

Который работает так, как задумано для моего приложения...Но FxCop по-прежнему показывает это сообщение.Прикрыт ли я и могу ли я безопасно игнорировать это, или есть другой способ, которым я должен это делать?

Это было полезно?

Решение

Вам нужно переопределить Dispose способ из Form

Обычно это автоматически переопределяется в файле RestartForm.Designer.cs, поэтому вам нужно будет переместить dispose в ваш файл code, чтобы вы могли добавить любой код, который вам нужно добавить, без перезаписи дизайнером.

В RestartForm.cs

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

    // Dispose stuff here
  }

  base.Dispose(disposing);
}

Другие советы

Я использую этот метод :)

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

Если RestartForm расширяет систему.Windows.Формы.Форма, вы должны иметь возможность переопределять Dispose(удаление bool).Вы должны правильно реализовать это для вашего класса "RestartForm", чтобы избавиться от ваших IDisposables.

Это должно выглядеть так:

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

Вам нужно переопределить метод Dispose, этот метод исходит от Управляющего базовый класс

protected override void Dispose(bool disposing)
{
  if (disposing)
  {
    event.Dispose();
  }
  base.Dispose(disposing);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top