0

由于某种原因,在非 UI 线程中发生的未处理异常不会由 App_UnhandledException 处理程序处理。

此方法适用于 Windows Phone 应用程序以全局处理、跟踪和分析异常,但不适用于 Windows 8 应用程序。

this.UnhandledException += App_UnhandledException; //doesn't handle

private void Button_Click_1(object sender, RoutedEventArgs e)

{
   var task = new Task(() => { throw new NullReferenceException("Test exc in UI thread"); });
   task.Start();
}

请指教。

4

2 回答 2

0

使用新的async/await关键字:

private async void Button_Click_1(object sender, RoutedEventArgs e)
{
    var task = new Task(() => { throw new NullReferenceException("Test exc in UI thread"); });
    task.Start();
    try
    {
        await task;
    }
    catch (Exception ex)
    {
        var msg = new MessageDialog(ex.ToString(), "An error has occurred");
        await msg.ShowAsync();
    }
}

仅使用以下Task方法:

private void Button_Click_1(object sender, RoutedEventArgs e)
{
    var task = new Task(() => { throw new NullReferenceException("Test exc in UI thread"); });
    task.ContinueWith(t =>
    {
        var msg = new MessageDialog(t.Exception.ToString(), "An error has occurred");
        msg.ShowAsync().Start();
    }, TaskContinuationOptions.OnlyOnFaulted);
    task.Start();
}

要捕获所有未处理的异常,请参阅以下问题:

于 2012-10-06T22:03:51.570 回答
0

使用 TaskScheduler 的 UnobservedTaskException 事件,您可以捕获任务中未等待的所有异常。澄清一下:如果您等待任务异常会传播到 UI 线程,因此可以通过 Application.UnhandledException 捕获。

于 2012-10-07T07:26:53.413 回答