[英]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.