📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

編集の要約なし
編集の要約なし
12行目: 12行目:


== 処理されていない例外をハンドルするには ==
== 処理されていない例外をハンドルするには ==
'''1. Application.ThreadExceptionイベントの活用'''
* '''Application.ThreadExceptionイベントの活用'''
処理されなかった例外をハンドルするには、WindowsフォームならApplicationクラス(System.Windows.Forms名前空間)の<br>
:処理されなかった例外をハンドルするには、WindowsフォームならApplicationクラス(System.Windows.Forms名前空間)の
ThreadExceptionイベントをハンドルして処理する。<br>
:ThreadExceptionイベントをハンドルして処理する。
このイベントは、Windowsフォームのメインスレッド(ApplicationクラスのRunメソッドにより実行されるアプリケーションのコンテキスト)内で<br>
:このイベントは、Windowsフォームのメインスレッド(ApplicationクラスのRunメソッドにより実行されるアプリケーションのコンテキスト)内で
発生した未処理の例外をハンドルするためのものである。<br><br>
:発生した未処理の例外をハンドルするためのものである。


'''2. Thread.GetDomain().UnhandledExceptionイベントの活用'''
* '''Thread.GetDomain().UnhandledExceptionイベントの活用'''
では、上記のメイン・スレッド以外のコンテキスト上で発生した例外は、<br>
:では、上記のメイン・スレッド以外のコンテキスト上で発生した例外は、
現在のアプリケーションドメイン(AppDomainクラス(System名前空間)のThread.GetDomainメソッドにより取得できる)の<br>
:現在のアプリケーションドメイン(AppDomainクラス(System名前空間)のThread.GetDomainメソッドにより取得できる)の
UnhandledExceptionイベントで出来る。<br>
:UnhandledExceptionイベントで出来る。
例えば、マルチスレッド処理において、メインスレッド以外のスレッドで発生した例外やコンソールで発生した例外等は、<br>
:例えば、マルチスレッド処理において、メインスレッド以外のスレッドで発生した例外やコンソールで発生した例外等は、
全てこのUnhandledExceptionイベントをハンドルして処理すればよい。<br><br>
:全てこのUnhandledExceptionイベントをハンドルして処理すればよい。


上記2つのイベントを活用して未処理の例外を実際に処理しているのが、次のサンプルコードである。<br><br>
上記2つのイベントを活用して未処理の例外を実際に処理しているのが、次のサンプルコードである。<br><br>