c #windows表单应用程序使进程在错误后运行

时间:2014-06-03 19:45:03

标签: c# winforms exception-handling

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

我的应用访问数据库,只要它已经完成,一切都很好。我已经尝试/ 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中尝试/捕获错误的方法吗?我从一开始就是关于控制台应用程序的初学者指南,以及它在那里的表达方式,但我对所有这些的基本假设是我错过了任何有能力的人...... / p>

1 个答案:

答案 0 :(得分:0)

你的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用来帮助调试。