C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: drag系のイベントで例外がスルーされるのはなぜでしょう?


(過去ログ 52 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■28955 / inTopicNo.1)  drag系のイベントで例外がスルーされるのはなぜでしょう?
  
□投稿者/ KENT (4回)-(2008/12/02(Tue) 23:30:33)

分類:[.NET 全般] 

度々質問ですいません。

C#2008 Express Edition でプログラムを組んでいました。
ファイルをDropした時にファイルを読み込みある処理をする様にしてるのですが、
try ブロックは一切書いていないのにもかかわらず、開発環境で処理が止まることなく
何事も無かったかの様にスルーされてしまいます。

その現象が発生するのは、どうやら Drag系のイベントのようです。

↓スルー(try を書くと catch で例外を捕まえることは出来ます)
private void textBox1_DragEnter(object sender, DragEventArgs e) {
int a = int.Parse("a");
}
↓スルー
private void textBox1_DragDrop(object sender, DragEventArgs e) {
int a = int.Parse("a");
}
↓例外発生する
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
int a = int.Parse("a");
}

で、VB2008、C#2005 でも試してみましたが同様の現象が出ました。

なぜこの様な現象が発生するのかご存知のかたいらっしゃいますでしょうか?

たまたま気づいたのがdrag系のイベントでしたが他もこの様な現象が発生するイベントは
あるのでしょうか?

スルーされては困ってしまいます( ´△`)アァ-
引用返信 編集キー/
■28959 / inTopicNo.2)  Re[1]: drag系のイベントで例外がスルーされるのはなぜでしょう?
□投稿者/ Azulean (237回)-(2008/12/03(Wed) 00:41:05)
DragDrop周りは、.NET Frameworkでは覆い隠されていますが、COMが使われています。
この関係で、スローされた例外はデバッガがハンドルするのではなく、COM相互運用機能周辺でハンドルされて、HRESULTとしてCOMの呼び出し元に返しているのかもしれません。

前後にご自身でtry-catchを入れて頂ければ確かめられると思いますが、例外はきちんとスローされているはずです。
その例外がデバッガで拾われるかどうかの違いです。
引用返信 編集キー/
■28968 / inTopicNo.3)  Re[2]: drag系のイベントで例外がスルーされるのはなぜでしょう?
□投稿者/ 魔界の仮面弁士 (926回)-(2008/12/03(Wed) 09:27:15)
No28959 (Azulean さん) に返信
> 前後にご自身でtry-catchを入れて頂ければ確かめられると思いますが、例外はきちんとスローされているはずです。
> その例外がデバッガで拾われるかどうかの違いです。

[デバッグ]-[例外]メニューで、FormatException にチェックを入れておくと、
先のドラッグ中の例外も捉えられるかも。

[Common Language Runtime]
└[System]
 └[System.FormatException] ……[v]

引用返信 編集キー/
■29051 / inTopicNo.4)  Re[3]: drag系のイベントで例外がスルーされるのはなぜでしょう?
□投稿者/ KENT (5回)-(2008/12/03(Wed) 21:42:32)
> ■No28959 (Azulean さん) に返信
>>前後にご自身でtry-catchを入れて頂ければ確かめられると思いますが、例外はきちんとスローされているはずです。
>>その例外がデバッガで拾われるかどうかの違いです。
はい。確かに try-catch を書くと捕まえることはできました。
デバッグしてる時って、catchに跳んじゃうとデバッグ大変になるので、
いつもある程度出来上がってから書くようにしてます(;^_^A

No28968 (魔界の仮面弁士 さん) に返信
> [デバッグ]-[例外]メニューで、FormatException にチェックを入れておくと、
> 先のドラッグ中の例外も捉えられるかも。
>
> [Common Language Runtime]
> └[System]
>  └[System.FormatException] ……[v]
デバッガでちゃんととまりました!
なんでデフォルトでチェックついていないんでしょうかねぇ・・・
思わず全てチェック付けたくなっちゃいました(;^_^A

お二方、ありがとうございました。

解決済み
引用返信 編集キー/
■29056 / inTopicNo.5)  Re[4]: drag系のイベントで例外がスルーされるのはなぜでしょう?
□投稿者/ Azulean (238回)-(2008/12/03(Wed) 22:46:07)
> デバッガでちゃんととまりました!
> なんでデフォルトでチェックついていないんでしょうかねぇ・・・

デバッガでデフォルトで止まるのはハンドルされていない例外です。
前述の設定を行うと、ハンドルされていようがされていまいが、問答無用でスローするタイミングでデバッガが停止します。

この場合に何が問題かというと、try-catchで処理されるはずの関係のない例外で毎回ストップするハメになり、逆にデバッグがやりにくくなることがあります。
このため、デフォルトではチェックが入っていないと考えられます。
解決済み
引用返信 編集キー/
■29066 / inTopicNo.6)  Re[5]: drag系のイベントで例外がスルーされるのはなぜでしょう?
□投稿者/ KENT (7回)-(2008/12/04(Thu) 00:26:56)
No29056 (Azulean さん) に返信
> デバッガでデフォルトで止まるのはハンドルされていない例外です。
> 前述の設定を行うと、ハンドルされていようがされていまいが、問答無用でスローするタイミングでデバッガが停止します。
>
> この場合に何が問題かというと、try-catchで処理されるはずの関係のない例外で毎回ストップするハメになり、逆にデバッグがやりにくくなることがあります。
> このため、デフォルトではチェックが入っていないと考えられます。
えっ。そ、そうなんですか。。。
それも確かに困るかも知れないです。。。
あと、チェックを付けるとなぜかエディットコンティニューが効かなくなりました(T_T)

その場その場に応じてチェック付けたり外したりして対応したいと思います。

ありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -