关闭.NET应用程序 - 对象处置异常

时间:2013-09-06 02:08:55

标签: c# .net winforms exception object

我有这个C#项目...如果我在主窗体中打开了一个formdialog,然后单击该应用程序中存在的formdialog上的一个按钮,它会关闭然后崩溃并发生名义异常。消息是“无法访问已处置的对象”,它位于主program.cs文件中。

在formdialog关闭后,它再次开始处理主窗体,并运行this.Close()。如果我改为执行Application.Exit(),它不会崩溃但它也不会关闭,它只是保持打开状态,这是我不明白的。

在添加一些与注册表相关的代码之前我没有开始遇到这个问题,但我不记得确切的时间,也不清楚这会对此产生什么影响。

我的错误在于Application.Run()行:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new GettingStarted());
    }
}

主窗体只是让用户找到一个用该程序打开的sqlite数据库。一旦他们选择了一个,它就会运行opendb()并进入下一个对话框表单。对话框结束后,如果主窗体没有告诉它保持打开状态,它就会退出。

    private void opendb(string path)
    {
        if (path == "") { return; }

        Registry.CurrentUser.SetValue("HKEY_CURRENT_USER\\Software\\JPro\\RecentDBPath", path);

        this.Hide(); MainJView j = new MainJView(path); j.Location = this.Location; j.ShowDialog();

        if (j.return2start == 1)
        {
            this.Location = j.Location; this.Show();
        }
        else if (j.return2start == 2)
        {
            this.Location = j.Location; this.Show(); 
            this.form_selectdb(null, null);
        }
        else
        {
            this.Close(); 
        }
    }

1 个答案:

答案 0 :(得分:0)

你知道这行代码块

this.Hide(); MainJView j = new MainJView(path); j.Location = this.Location; j.ShowDialog();

并等待MainJView关闭。你想要的是首先打开MainJView表单。在你的构造函数中你想用.ShowDialog()打开GettingStarted,并根据你选择关闭或继续的结果