在没有任何消息的情况下关闭unhandledexception上的winform应用程序

时间:2014-01-20 18:44:54

标签: c# winforms

如果发生任何不可处理的异常,我希望我的exe关闭。我已尝试How can I make something that catches all 'unhandled' exceptions in a WinForms application?Terminate application after unhandled exception以及我在stackoverflow&gt;中找到的其他几个帖子但是没有效果我可以关闭程序而不显示消息框“应用程序中出现未处理的异常。如果单击继续,应用程序将忽略此错误并尝试继续如果单击退出,应用程序将立即关闭”。< / p>

我想退出应用程序,但我不希望显示此消息。非常感谢帮助。

代码:

[STAThread]
        static void Main()
        {


           //   Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

                // Add the event handler for handling non-UI thread exceptions to the event. 
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());


        }
       public static void MyHandler(object sender, UnhandledExceptionEventArgs e)
        {
            Exception exception = e.ExceptionObject as Exception;
            System.Diagnostics.Process proc = System.Diagnostics.Process.GetCurrentProcess();
            Application.Exit();
            proc.Kill();

        }

获取异常时会显示此消息框。不能添加它,因为我没有声望点。 Jus现在开了账户。

我不希望显示此消息框,也不想单击退出按钮退出程序。只想退出任何未处理的异常。

3 个答案:

答案 0 :(得分:4)

检查是否有效

public static void Main()   
{
   Application.ThreadException += HandleAll();
   Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException)
}



private static void HandleAll(object sender, System.Threading.ThreadExceptionEventArgs e)   
{
   Application.Exit();
}

如果您希望应用程序中有多个线程,那么:

AppDomain.CurrentDomain.UnhandledException += .....

答案 1 :(得分:1)

Main中的启动逻辑周围放置一个try-catch块。

public static void Main()
{
    try
    {
        // run the application
    }
    catch
    {
        // ignore any exceptions (FYI...this is bad practice)
    }
} 

答案 2 :(得分:1)

Application.Exit应该足够您不需要也杀死进程。