c# - AppDomain.UnhandledException 自动重新抛出已处理的异常

标签 c# wpf exception

我试图捕获应用程序中所有未处理的异常,以便有条件地处理那些可能在不终止应用程序的情况下发生的异常,但我无法解决一个非常基本的问题:它不会停止异常。代码中某处抛出未处理的异常,它来到这里,显示消息框,然后应用程序要么显示相同的异常未处理(如果处于 Debug模式),要么只是崩溃(如果在没有调试的情况下运行)。这意味着即使调用了处理程序,异常也保持未处理状态。

App() {
    AppDomain.CurrentDomain.UnhandledException += (s, a) => {
        var ex = (Exception)a.ExceptionObject;
        MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
    };
}

这是来自一个新的空白测试项目,除了这段代码和一个单击时抛出异常的按钮之外什么都没有。

最佳答案

您忘记终止您的程序。因此它继续正常的未处理异常处理。添加这一行:

  Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(ex));

稍微费力的 Marshal 调用可确保为您的进程获取 Process.ExitCode 的另一个进程获得合理的错误指示。它是可选的,仅是推荐的。

关于c# - AppDomain.UnhandledException 自动重新抛出已处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14665207/

相关文章:

C# - 从不同程序集加载图像

c# - 为什么当我从集合中添加或删除项目时,带有 ObservableCollection<T> 的 DataGrid 显然没有刷新?

c# - 我没有关闭以前的 DataReader,但是在哪里?

c# - tcp 监听器中的套接字异常

c# - 如何在不更改原始列表的情况下更改新列表?

c# - .NET DateTime ToString Culture en-US 在一些盒子上输出 4 位数年份,在其他盒子上输出 2 位数年份

wpf - 如何在 WPF TreeViewItem 中自动换行?

java - 分别捕获不同的异常有什么好处吗?

c# - 调用存储过程忽略输出参数

c# - 如何在 asp.net 的代码隐藏中启用禁用按钮