【问题标题】:closing .NET application - object disposed exception关闭 .NET 应用程序 - 对象处理异常
【发布时间】:2013-09-06 02:08:55
【问题描述】:

我有这个 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(); 
        }
    }

【问题讨论】:

  • 没有。一旦你进入主表格,我不知道如何改变表格,所以无论我在做什么都是我过去一天自己想出来的。有关更多代码,请参阅更新后的帖子
  • opendb 在用户浏览数据库后以“gettingstarted”形式调用。然后它将DB的路径传递给opendb,然后移动到下一个窗体以打开它并显示主程序。

标签: c# .net winforms exception object


【解决方案1】:

你知道这一行的这个代码块

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 2010-10-17
    • 2014-06-16
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多