2009年2月15日
ハンドルされていない例外の捕捉でハマル
C#でシリアル通信のプログラムを書いてたわけですが…最近はCOMポートを持っていないマシンが多く、わたしの使ってるマシンも標準ではCOMポートがありません。
そこで、以下のUSB-シリアル変換器を使ってるわけです。COM番号etc.の設定もできるしなかなかの優れもの。
![]() |
REX-USB60F USB-Serial Converter ラトックシステム 2005-06-30 by G-Tools |
アプリケーションから見ると普通のCOMポートとなんら変わりなく扱えます。
そこで、ちょっとした出来心が…実行途中でUSB-シリアル変換機を抜いてからアプリケーションを終了すると。COMポートを閉じに行くところで…うぎゃ~system.dllでハンドルしてない例外が飛び出てアプリケーションエラー発生
ポートをクローズするところのtry…catchでは捕まえられないんですね
まぁ、以下にあるMSDNのサンプルでも同じ現象なのでヨシですね(違。
まぁ、実段階ではCOMポートを装備したマシンを使うので、ポートがなくなるなんて事態はありえないわけですが
でも、アプリケーションエラーがでるのはキモチ悪いので『@IT:.NET TIPS 適切に処理されなかった例外をキャッチするには?』あたりを参考に捕捉してみました。
確かに捕捉はできたのですが、MessageBoxをわざわざ表示することもないかと思いUnhandledExceptionを握りつぶすだけにすると…。
仕方ないので、さらに検索してみると…
のようにUnhandledExceptionハンドラでEnvironment.Exitを呼び出してる人が結構いるようなので真似してみたら…アプリケーションエラーはでなくなりました
どうも、UnhandledExceptionが発生した時の状態にはMessageBoxで止まったり、止まらなかったり数種の状態がある感じがします。
なので、UnhandledExceptionのハンドラではMessageBoxとかは使わずにコンソールやログ出力だけして、Environment.Exitを呼び出して終わるのが「吉」っぽいと言うのが結論でした。
ちゃんちゃん
TrackBack URL :

