【问题标题】:Catch unhandled exceptions from any thread从任何线程捕获未处理的异常
【发布时间】:2013-03-09 18:01:07
【问题描述】:

编辑

这个问题的答案有帮助谢谢我的帮助:)但我最终使用了:http://code.msdn.microsoft.com/windowsdesktop/Handling-Unhandled-47492d0b#content


原问题:

我想在我的应用程序崩溃时显示错误消息。

目前我有:

App.xaml:

<Application x:Class="WpfApplication5.App"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      DispatcherUnhandledException="App_DispatcherUnhandledException"  // <----------------
      StartupUri="MainWindow.xaml">
    <Application.Resources>             
    </Application.Resources>
</Application>

App.xaml 的代码隐藏:

namespace WpfApplication5
{        
    public partial class App : Application
    {
        private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show("Caught Unhandled Exception!");
        }
    }
}

当错误发生在主线程上时,该解决方案效果很好。现在我的问题是我如何才能捕捉到另一个线程上发生的错误?

换句话说:当我按下这个按钮时,我能够捕捉到异常:(App_DispatcherUnhandledException 被调用!)

    private void button1_Click(object sender, RoutedEventArgs e)
    {            
        int.Parse("lkjdsf");
    }

但我无法捕捉到这个异常:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Task.Factory.StartNew(() =>
        {
            int.Parse("lkjdsf");
        });
    }

无论是否发生在主线程上,我如何才能捕获所有异常?

【问题讨论】:

    标签: c# .net wpf exception unhandled-exception


    【解决方案1】:

    您可以使用AppDomain.UnhandledExceptionHandler 来处理未捕获的异常。

    【讨论】:

    • System.AppDomain.UnhandledException 给我一个奇怪的错误为什么?我会继续努力的。
    • 让它工作我必须做的:System.AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
    • @TonoNam 捕获System.AppDomain.UnhandledException后,您的应用程序是否会关闭
    • 没有应用程序仍在运行。我只是想知道不同线程上何时发生异常。
    • 这不会捕获来自其他线程的未处理异常。 Task.Factory.StartNew(() =&gt; throw new Exception("Hey this is an exception")); 不会被此事件处理程序捕获。
    【解决方案2】:

    使用 AppDomain.UnhandledException 事件捕获此异常。而不是你需要使用调度程序才能在 messageBox 中显示此异常(这是因为只有 ui 线程才能显示消息)

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-16
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多