[英]How to handle object disposed exception was unhandled Exception in c#?
我在C#Windows應用程序中工作。我有兩個窗口,分別是Form1和Form2。我正在通過單擊Form1中的按鈕來調用Form2,但是我在Form1的構造函數中為Form2創建了對象。如果我第一次單擊按鈕,則Form2出現了成功之后,我通過單擊默認的關閉按鈕關閉了form2,然后再次單擊該按鈕,現在我得到對象處置異常是未處理的異常。如何避免這種情況?
不要處理異常,請修復代碼中的錯誤。 關閉表單后,表單實例已失效,無法再次顯示。 可以這樣寫:
private void button1_Click(object sender, EventArgs e) {
var frm = new Form2();
frm.Show(this);
}
或者,如果您只希望表單的一個實例可見:
Form2 theForm;
private void button1_Click(object sender, EventArgs e) {
if (theForm != null) {
theForm.WindowState = FormWindowState.Normal;
theForm.BringToFront();
}
else {
theForm = new Form2();
theForm.FormClosed += delegate { theForm = null; };
theForm.Show(this);
}
}
您正在保留對該對象的引用(此處的窗口),但您正在關閉它。 對象已處置但未進行垃圾收集。 由於對象已失去其可用狀態,因此此處的引用現在無效。
如果您需要重新使用它,則需要隱藏它而不是關閉它。 或創建一個新實例以再次加載它。
您可以使用事件,以便在關閉form2時通知form1並清除對其的引用。 然后,如果form1已關閉,則不需要調用form2。
我們在這里使用插入第三方應用程序的一些工具來執行類似的操作。 下面的代碼示例:
public class Form1 : Form
{
private Form2 otherForm;
private void ActivateForm2_Click(object sender, EventArgs e)
{
if (otherForm == null || otherForm.IsDisposed)
{
otherForm = new Form2();
otherForm.FormClosed += new FormClosedEventHandler(otherForm_closed);
}
otherForm.Show(this);
}
private void otherForm_Closed(object sender, FormClosedEventArgs e)
{
otherForm.Dispose();
otherForm = null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.