代码分析抱怨"CA2000 Dispose objects before losing scope"当我不处理我的 MDI 子窗体时



ca2000在失去范围之前处置对象

在方法中FormMain.barButtonItem1_ItemClick(object, ItemClickEventArgs)

call system.idisposable.dispose在对象" frm"上的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(),因为将不会显示表格。

我还试图处理闭合形式然后处置,但违规始终在这里。

代码分析无法确定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();
}

最新更新