- - PR -
イベントハンドラでの例外Throwの可否について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-12-16 11:28
お世話になっております。
VB.NETでWindowsアプリケーションの開発をしています。 私の作った画面は、スタートアップフォームにして起動するのではなく、別クラス(Module)の"Sub Main()"からShowDialogメソッドで呼び出す方式をとっています。 で、Form上の各コントロールのイベントハンドラで例外が発生した場合はその例外をThrowし、呼び元であるMainメソッドのCatch部において、Form上で発生したすべての例外処理のハンドリングを一括して行おうと考えました。 ところが、Windows標準コントロールのイベントハンドラで発生した例外をThrowしようとしても、Mainメソッドへ返ってくれないようなのです。(ハンドリングされていない例外が発生しましたとのランタイムエラー(?)のダイアログが表示されます。) GrapeCity社のInputMan for .NETのFunctionKeyコントロールのFunctionKeyPressイベントではMainまで例外を返してくれているようなので上記の方法を選択したのですが.. (ShowDialogメソッドで例外が発生したかのように振る舞っています。) で思ったのが、そもそも 「イベントをハンドリングしているメソッドで例外が発生してもThrowしてはいけません」 みたいな言語仕様的なものがあるのかもということです。 「その通り。」とか、「そんなことはない。」とか、「自分はこんな方法で実現している」 みたいなレスをお願いします。 | ||||||||
|
投稿日時: 2004-12-16 11:54
そう振舞うのは、ShowDialogメソッドが Form の出入り口 になっているからではないでしょうか? | ||||||||
|
投稿日時: 2004-12-16 11:56
そういうもんです。 これは、Windows の GUI の仕組みによるものです。 詳細が知りたければ、メッセージポンプやウィンドウメッセージのディスパッチなどの仕組みについて調べてみてください。
ということはありません。 自ら throw しなくても、例えばファイル入出力に失敗した場合など、ランタイムが throw する場合だったあります。 イベントハンドラで発生した例外を捕捉するために、Application.ThreadExcepion イベントが用意されています。 _________________ // 渋木宏明 (Hiroaki SHIBUKI) // http://hidori.jp/ // Microsoft MVP for Visual C# // // @IT会議室 RSS 配信中: http://hidori.jp/rss/atmarkIT/ |
1