13,009
回編集
(→例外処理) |
|||
| 316行目: | 316行目: | ||
Debug.WriteLine(ex.GetType()); | Debug.WriteLine(ex.GetType()); | ||
} | } | ||
} | |||
catch (Exception ex) | |||
{ // 未処理の例外をキャッチ | |||
Trace.WriteLine($"Log: {ex}"); | |||
} | |||
catch | |||
{ // SEHをキャッチ | |||
Trace.WriteLine("Log: Caught uninterpreted exception."); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| 328行目: | 336行目: | ||
{ | { | ||
Debug.WriteLine(exception.ToString()); | Debug.WriteLine(exception.ToString()); | ||
} | |||
catch (Exception ex) | |||
{ // 未処理の例外をキャッチ | |||
Trace.WriteLine($"Log: {ex}"); | |||
} | |||
catch | |||
{ // SEHをキャッチ | |||
Trace.WriteLine("Log: Caught uninterpreted exception."); | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | <br> | ||
<code>Task</code>クラスで発生したキャッチされていない例外をまとめて処理する場合、<code>TaskScheduler.UnobservedTaskException</code>メソッドを使用する。<br> | <code>Task</code>クラスで発生したキャッチされていない例外をまとめて処理する場合、<code>TaskScheduler.UnobservedTaskException</code>メソッドを使用する。<br> | ||
<syntaxhighlight lang=" | <u>ただし、これは、例外が発生したタイミングでキャッチできないこと、および、例外をキャッチできたとしても対処可能なことが限られることに注意する。</u><br> | ||
<syntaxhighlight lang="cpp"> | |||
private async void buttonl_Click(object sender, RoutedEventArgs e) | |||
{ | { | ||
AggregateException ae = e.Exception; | await Task.Run(() => | ||
{ | |||
await Task.Delay(1000); | |||
} | }); | ||
// 非同期処理の未処理例外をキャッチする | |||
TaskScheduler.UnobservedTaskException += (sender, e) => | |||
{ | |||
AggregateException ae = e.Exception; | |||
Debug.WriteLine(ae.ToString()); | |||
e.SetObserved(); // .NET Framework 4.0の場合、これを記述しないとソフトウェアが強制終了する | |||
}; | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||