2007年06月21日

スレッド内で発生した例外

   このエントリーをはてなブックマークに追加 Clip to Evernote
昨日の記事「AppDomain.UnhandledException」の続き。

では、コンソールアプリで、スレッドを利用した場合の例外処理ってどうなるのだろうか?

public class Test {

[SecurityPermission(SecurityAction.Demand, Flags = SecurityPermissionFlag.ControlAp
public static void Example() {
AppDomain currentDomain = Thread.GetDomain();
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandle

Thread th = new Thread(MyThread);
th.Start();
Console.ReadLine();
Console.WriteLine("end");
}

static void MyThread() {
Console.WriteLine("Thread 開始");
throw new Exception("my thread error");
}

static void MyHandler(object sender, UnhandledExceptionEventArgs args) {
Exception e = (Exception)args.ExceptionObject;
Console.WriteLine("MyHandler caught : " + e.Message);
}

public static void Main() {
try {
Example();
} catch ( Exception ex ) {
Console.WriteLine("処理されていない例外: " + ex.Message);
}
}
}

というコードで試してみる。
UnhandledExceptionイベントハンドラは処理されるが、スレッド内で未処理の例外があるということで、昨日のコードと同様、プログラムが強制終了してしまう。

やはり、UnhandledExceptionで例外を処理するのではなく、MyThread()内で、try-catch を使い、例外処理をする必要があるようだ。


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/50837184