CA2000在丢失范围之前处置对象
方法FormMain.barButtonItem1_ItemClick(object, ItemClickEventArgs)
在对对象'frm'调用System.IDisposable.Dispose之前,对它的所有引用都超出范围。 Winpro FormMain.cs 32
方法:
private void barButtonItem1_ItemClick(object sender, ItemClickEventArgs e)
{
FormCustomerList frm = new FormCustomerList();
frm.MdiParent = this;
frm.Show();
}
这不是一个严重的问题,但为什么会被解雇呢?
我无法使用最终frm.Dispose()
或using()
,因为不会显示表单。
我还尝试处理表单关闭然后处理但是违规总是在这里。
答案 0 :(得分:2)
代码分析无法判断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();
}