UnobservedTaskException で未処理の例外を catch ・・・できなかった;
WinRT では UnobservedTaskException という未処理の例外を catch できるのではないかと思われるイベントがあります
イベントハンドラなど async void となるメソッド内で発生した例外は UnhandledException のイベントで catch できないですが、これなら catch できるのか?!と思い試してみました
/// <summary> /// アプリケーション起動処理 /// </summary> /// <param name="args"><see cref="LaunchActivatedEventArgs"/> の起動イベント引数</param> /// <returns>Task</returns> protected override Task OnLaunchApplication(LaunchActivatedEventArgs args) { TaskScheduler.UnobservedTaskException += this.OnOccuredUnobservedTaskException; NavigationService.Navigate("Top", null); return Task.FromResult<object>(null); } /// <summary> /// 監視されない例外発生イベントハンドラ /// </summary> /// <param name="sender">イベント発行者</param> /// <param name="e">イベント引数</param> private void OnOccuredUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) { Debug.WriteLine(e.Exception.ToString()); e.SetObserved(); }
catch はこんな感じに仕掛けるみたいです
あとはイベントハンドラで無理やり例外を発生させてみると
/// <summary> /// ボタンクリックイベントハンドラ /// </summary> /// <param name="sender">イベント発行者</param> /// <param name="e">イベント引数</param> private async void OnButtonCliced(object sender, RoutedEventArgs e) { throw new ArgumentException("これはテストです"); }
・・・catch できませんでした; やっぱり糖衣構文とかを使って地道にメソッド内 try catch するしかないんでしょうか;