如何处理对象处理异常是未处理的c#中的异常?

时间:2010-09-09 12:40:31

标签: c# exception

我在c #windows应用程序中工作。我有两个名为form1的窗口和form2.i通过单击form1中的按钮调用form2但是我在form1的constrcutor中为form2创建了对象。如果我先点击按钮时间form2显示成功之后,我通过单击默认关闭按钮关闭form2并再次单击按钮现在我得到对象处理异常是未处理异常。何时可以避免这种情况?

4 个答案:

答案 0 :(得分:2)

不要处理异常,修复代码中的错误。表单实例在表单关闭后死亡,您无法再显示它。要么像这样写:

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

答案 1 :(得分:1)

您正在保留对象(此处为窗口)的引用,但您正在关闭它。对象被处理但不是垃圾收集。此处的引用现在无效,因为对象已失去其可用状态。

如果需要重新使用,则需要隐藏表单而不是关闭。或者创建一个新实例以再次加载它。

答案 2 :(得分:1)

您可以使用事件,以便在关闭form2时让form1知道并清除其对它的引用。然后,如果form1已经关闭,那么form1不需要调用它。

答案 3 :(得分:0)

我们在此处执行类似操作,其中包含一些插入第三方应用的工具。代码示例如下:

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