C# 替换Windows窗体中默认的未处理错误对话框

C# 替换Windows窗体中默认的未处理错误对话框,c#,winforms,error-handling,C#,Winforms,Error Handling,目前,当我的Windows窗体程序中的某个窗体出现未经处理的错误时,会弹出一个对话框,其中包含大量与最终用户无关且令人困惑的详细信息 每当我的表单中出现未经处理的错误时,我想用一个更为用户友好的对话框来替换该对话框(并使用选项卡式界面隐藏但提供技术细节) 有没有办法用自定义对话框替换此默认对话框 我的应用程序是MDI应用程序,因此,如果表单中出现错误,我只想关闭该表单,以友好的方式显示错误,并允许它们与应用程序中的其他窗口一起工作(除非是严重错误)。我想到了几种方法。最简单的方法是通过侦听App

目前,当我的Windows窗体程序中的某个窗体出现未经处理的错误时,会弹出一个对话框,其中包含大量与最终用户无关且令人困惑的详细信息

每当我的表单中出现未经处理的错误时,我想用一个更为用户友好的对话框来替换该对话框(并使用选项卡式界面隐藏但提供技术细节)

有没有办法用自定义对话框替换此默认对话框


我的应用程序是MDI应用程序,因此,如果表单中出现错误,我只想关闭该表单,以友好的方式显示错误,并允许它们与应用程序中的其他窗口一起工作(除非是严重错误)。

我想到了几种方法。最简单的方法是通过侦听Application.ThreadException事件捕获所有未处理的异常

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);           
        Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        Application.Run(new Form1());
    }

    static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
    {
        MessageBox.Show(e.Exception.Message);
    }
但是,这将只是停止崩溃,而不是关闭mdi表单。如果停止发送线程,它将完全停止mdi表单(在mdi之外更容易,那么表单可以在单独的线程中运行,这些线程可以通过沙盒启动)

我通常做的是运行所有代码沙盒。通常封装在动作对象中,但我可以是一个简单的过程,例如

    public static bool Run(Action a)
    {
        try
        {
            a();
            return true;
        }
        catch(Exception ex)
        {
            //custom error handling here
            return false;
        }
    }
示例调用:

    private void button1_Click(object sender, EventArgs e)
    {
        Run( ()=>throw new Exception());
    }

在标准方法中运行还有一个额外的好处,即能够控制等待游标或日志记录。如果不是mdi环境,可能会有一些替代方案,但希望这是可行的。

什么语言/环境,例如.Net Java???似乎是一个处理异常的问题……我将尝试沙箱的想法。我也可以使用应用程序_ThreadException来处理不可恢复的内容。谢谢