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 イベントを使用すると、待機していないタスク内のすべての例外をキャッチできます。明確にするために: await タスクの例外は UI スレッドに伝達されるため、Application.UnhandledException を介してキャッチできます。

于 2012-10-07T07:26:53.413 に答える