Анализ кода Жалуется на "Утилиту объектов CA2000 до потери области действия", когда я не утилизирую свою дочернюю форму MDI
CA2000 Утилизируйте объекты, прежде чем потерять прицел
В методе FormMain.barButtonItem1_ItemClick(object, ItemClickEventArgs)
Вызовите System.IDisposable.Dispose для объекта 'frm' до того, как все ссылки на него выйдут из области видимости. Winpro FormMain.cs 32
Метод:
private void barButtonItem1_ItemClick(object sender, ItemClickEventArgs e)
{
FormCustomerList frm = new FormCustomerList();
frm.MdiParent = this;
frm.Show();
}
Это не серьезная проблема, но почему это происходит?
Я не могу использовать наконец frm.Dispose()
или же using()
потому что форма не будет показана.
Я также пытался обработать закрытие формы, а затем удалить, но нарушение всегда здесь.
1 ответ
Анализ кода не может сказать, что frm
все еще делает что-нибудь после того, как это выходит из области В этом конкретном случае объект должен остаться в живых после выполнения функции.
"Правильный" способ справиться с этим - сохранить ссылку на frm
в родительской форме. Эта ссылка затем может быть размещена в Dispose()
метод родительской формы.
private FormCustomerList frm;
private void barButtonItem1_ItemClick(object sender, ItemClickEventArgs e)
{
frm = new FormCustomerList();
frm.MdiParent = this;
frm.Show();
}
Если у вас есть несколько подформ, которые могут быть созданы (что, вероятно, если вы используете MDI), вы можете сохранить List<>
детских форм.
private List<FormCustomerList> frms = new List<FormCustomerList>();
private void barButtonItem1_ItemClick(object sender, ItemClickEventArgs e)
{
FormCustomerList frm = new FormCustomerList();
frms.Add(frm);
frm.MdiParent = this;
frm.Show();
}