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 するしかないんでしょうか;