次に示すような、1000ミリ秒間待つだけのメソッドを用意し、メソッドの最後で例外を発生させる。
void WaitOneSecond() { Thread.Sleep(1000); throw new Exception("My exception"); }
このメソッドを、次に示すように、新しいバックグラウンドスレッドで実行する。
Thread th = new Thread(new ThreadStart(WaitOneSecond)); th.IsBackground = true; th.Start();
WaitOneSecondで発生する例外をtry-catchでハンドリングする有効な方法は無い。
ハンドリングされなかった例外をCLRが扱う動作は.Net Framerowk 1.x以前と2.0以降で異なる。
Windowsアプリケーションで.Net Framework 1.x以前の場合は、例外の発生を知らせる表示は何も出ない。本体のWindowsアプリケーションは動き続ける。.Net Framework 2.0以降の場合は、例外の発生を知らせるダイアログが現われ、これに応答するとWindowsアプリケーション全体が停止する。
コンソールアプリケーションで.Net Framework 1.x以前の場合は、コンソールに例外が発生した旨の表示が現われるが、メソッドを新しいスレッドで呼び出した本体側のスレッドは動き続ける。.Net Framework 2.0以降の場合は、コンソールに例外が発生した旨及びそのスタックトレースの結果が表示され、アプリケーション全体が停止する。
WaitOneSecondで発生する例外は、.Net Framework 1.x以前でも2.0以降でも、AppDomain.CurrentDomainのUnhandledExceptionイベントで捕まえることができる。ただし、このイベントの直後、.Net Framework 2.0以降の場合は大抵アプリケーション全体が停止するので、例外から回復させることは難しい。このイベントは、例外の記録を残す程度の最後の局面と考えるべきである。.Net Framework 1.x以前の場合はアプリケーションは動作を続ける。