Как мне расширить метод Dispose WinForm?
Вопрос
Я получаю это предупреждение от 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);
}