タイトル : Re^2: Exceptionがcatchできない 投稿日 : 2009/12/05(Sat) 11:01 投稿者 : ダンボ
Hongliang さん、早々にありがとうございます。 > つまり PropertyIdList に &H501B が含まれているかどうかの事前チェックをせずに > 直接取りに行くってことですね? はい、含まれている場合が多いので。投機的処理ですね。 > catch できないっていうのはどういう状態になるのでしょう? catch句があるのに、そこに飛ばずに、ArgumentException 例外を伝える例外ダイアログが 出てきます。 > 例外が出るなら、そのスタックトレースはどうなっていますか? 調査方法がわかりません。例外ダイアログから見れるのでしょうか? > サムネイルを持っている(&H501B の PropertyItem がある)画像ファイルの場合はどうなりますか? > 逆に持っていない画像の場合は? 100%再現しますが、サムネイル有りなら思った通りの動作、無しなら必ず例外ダイアログです。 > > fs.Close() > FileStream に Using を使っているのですからこれは不要です。 Disposeを代行してくれるとだけ思っていました(もっともDisposeにはCloseも含まれるか) > MemoryStream はコンストラクタの引数に Byte 配列を受け取ることができます。 > http://msdn.microsoft.com/ja-jp/library/e55f3s5k.aspx > これを使えば imageBytes や Write メソッドの呼び出しは不要です。渡した Byte() で初期化済みになるので。 > また、画像のソースとなる Stream は、画像を使わなくなるまで Close すべきではありません。 > 特に MemoryStream は Close するメリットは無いと言っていいでしょう。 ありがとうございます。試してみます。 > > Using fs As IO.FileStream = IO.File.OpenRead(path) > > Finally > > fs.Close() > > End Try > > End Using > Using はこの Finally 節を自動的に実装してくれる機能です(Nothing チェックとかも入りますが)。 > わざわざ自分で Finally 節を書くなら Using の意味がありません。 > この Finally 節は不要です。 ありがとうございます。Usingは偉いんですね。なんだか例外をcatchできないのは UsingとTry_Catch_Finallyとの組み合わせの問題のような気がしてきました。 (というかそれ以外にあり得ないのでは) |