1

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

这不是一个严重的问题,但为什么会被解雇呢?

我不能使用 finallyfrm.Dispose()或者using()因为不会显示表单。

我也尝试过处理表单关闭然后处理,但违规总是在这里。

4

1 回答 1

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();
}
于 2014-01-28T00:42:56.303 回答