c# Windows窗体应用程序在出现错误后离开进程运行

本文关键字:错误 离开 进程 运行 Windows 窗体 应用程序 | 更新日期: 2023-09-27 18:06:24

我正在写我的第一个c# windows窗体应用程序,我是新的编程(我做过excel宏,几年前我曾经写过嵌入式的东西,但我只是一个帮助台的无人机试图做一些帮助我的外语学习),我基本上不知道我在做什么,谷歌搜索了很多,这通常是有效的,但我已经被困在这一整天。

我的应用程序访问数据库,只要它是正常的,一切都很好。我有try/catch/finally数据库访问,当有错误时,它显示详细信息,然后关闭应用程序-除了它仍然在任务管理器中作为后台进程,我无法找出它失败的原因。

main.cs有

static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        StartupScreen MainScreen = new StartupScreen();
        MainScreen.Show();
        Application.Run();
        Application.Exit();
    }

,错误的捕获是

catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error 7");
            if (conn2 != null)
            {
                conn2.Close();
            }
            this.Close();
            Application.Exit();
        }

如果没有错误,当用户单击退出按钮或X时,它会干净地退出,但如果数据库出现故障,则必须使用任务管理器退出,这并不理想。我没有故意启动任何后台进程,Visual Studio将STAThread放在main.cs上,我猜这意味着它是一个单线程应用程序,但我几周前才开始尝试这样做,我可怜的人文学科学生的小大脑无法应对。

是尝试/捕获错误的方式来做这个在WinForm?我的入门指南是从主机应用开始的,这就是它所说的,但我的基本假设是,我错过了一些对任何有能力的人来说都很明显的东西。

c# Windows窗体应用程序在出现错误后离开进程运行

你的Main有点奇怪。标准格式更像是:

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

您不需要调用Application.Exit(),无论是在Main中还是在catch中。

catch中,调用this.Close()将关闭表单,导致Application.Run完成,这是Main的结束,因此应用程序将退出。

还有,你是从Visual Studio运行你的程序吗?如果任务管理器中的进程名为yourapplication.vshost.exe,那么不用担心——它是Visual Studio用来帮助调试的。