ハンドルされていない例外の捕捉でハマル

C#でシリアル通信のプログラムを書いてたわけですが…最近はCOMポートを持っていないマシンが多く、わたしの使ってるマシンも標準ではCOMポートがありません。

そこで、以下のUSB-シリアル変換器を使ってるわけです。COM番号etc.の設定もできるしなかなかの優れもの。

B000ANR7T4 REX-USB60F USB-Serial Converter
ラトックシステム 2005-06-30

by G-Tools

アプリケーションから見ると普通のCOMポートとなんら変わりなく扱えます。

そこで、ちょっとした出来心が…実行途中でUSB-シリアル変換機を抜いてからアプリケーションを終了すると。COMポートを閉じに行くところで…うぎゃ~system.dllでハンドルしてない例外が飛び出てアプリケーションエラー発生 :| ポートをクローズするところのtry…catchでは捕まえられないんですね :shock:

まぁ、以下にあるMSDNのサンプルでも同じ現象なのでヨシですね(違。

まぁ、実段階ではCOMポートを装備したマシンを使うので、ポートがなくなるなんて事態はありえないわけですが :arrow:

でも、アプリケーションエラーがでるのはキモチ悪いので『@IT:.NET TIPS 適切に処理されなかった例外をキャッチするには?』あたりを参考に捕捉してみました。

確かに捕捉はできたのですが、MessageBoxをわざわざ表示することもないかと思いUnhandledExceptionを握りつぶすだけにすると…。

ぎゃあ~アプリケーションエラー復活

仕方ないので、さらに検索してみると…

のようにUnhandledExceptionハンドラでEnvironment.Exitを呼び出してる人が結構いるようなので真似してみたら…アプリケーションエラーはでなくなりました ;)

どうも、UnhandledExceptionが発生した時の状態にはMessageBoxで止まったり、止まらなかったり数種の状態がある感じがします。

なので、UnhandledExceptionのハンドラではMessageBoxとかは使わずにコンソールやログ出力だけして、Environment.Exitを呼び出して終わるのが「吉」っぽいと言うのが結論でした。

ちゃんちゃん :roll:

Be Sociable, Share!

TrackBack URL :

No comments yet. Be the first.

Leave a reply