无法访问已处置的对象

时间:2012-11-30 22:54:17

标签: c# forms object dispose

我的程序有多种形式。第五个也是最后一个表单有一个按钮,单击该按钮时,使用Application.Exit()方法关闭应用程序。但是,每次单击按钮时,我都会在第一个表单上收到错误“无法访问处理对象”的错误:

 frm2 f2 = new frm2();
            this.Hide();
            f2.ShowDialog();
            this.Show();

编译器指示语句this.show()是问题所在。有人可以解释为什么我收到此错误以及如何解决它?

2 个答案:

答案 0 :(得分:2)

好我编辑了我的回答,我转载了你的问题。如果要使用Form.ShowDialog,则应设置关闭应用程序的控件的DialogResult。因此,在按钮属性中,您应该将对话框结果设置为某些内容,例如Cancel

然后在按钮点击事件上你会做这样的事情:

    private void btnClose_Click(object sender, EventArgs e)
    {
        if (this.DialogResult == DialogResult.Cancel)
        {
            Application.Exit();
        }
    }

否则,如果您不需要使用Form.ShowDialog,则可以只显示Form2。以上不会在我的测试中产生错误。

答案 1 :(得分:0)

在您的代码示例中,frm2是否拨打了Application.Exit?如果有,那你为什么要再次拨打this.Show

无论如何,您可能遇到与启动应用程序消息循环有关的问题。您是在运行Application.Run()还是Application.Run(form1)

如果您在启动消息循环时向Application.Run()提供了表单,则不应调用Application.Exit以退出应用程序。相反,您应该只关闭主窗口,这将导致消息循环完成,调用Application.Run返回,并且您的应用程序将彻底终止。