簡體   English   中英

當我不處理我的MDI子窗體時,代碼分析投訴“ CA2000在失去作用域之前先處理對象”

[英]Code Analysis Complains about “CA2000 Dispose objects before losing scope” when I Don't Dispose My MDI Child Form

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()因為將不會顯示表單。

我也曾嘗試處理表單關閉然后進行處理,但違規始終在這里。

代碼分析無法判斷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();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM