フォローアップ: キャッチできない例外、pt 2
カスタム バインディング エンジンを作成しています。私のコンバーターは、ターゲット要素に DataContext が設定される前に呼び出されています。DataContext が最終的に値を受け取ったときに更新されるため、これ自体は大したことではありません。問題を引き起こしているのは、DataContext が null であるために取得している NullReferenceException です。これは、キャッチしたくないようです。
値コンバーターで例外をキャッチしようとしていますが:
try {
return ( (MethodInfo)_member ).Invoke( parameter, null );
} catch {
return null;
}
何らかの理由で、デバッガーはこの時点でまだ停止しています。
(これは、catch ブロックのある場所までスタック トレースを少しバックアップしたものです。実際の例外は _member メソッド内で発生します。奇妙な点は、catch ブロックがグレー表示されているにもかかわらず、ブレークポイントに到達していないことです。)
今、私はそれがキャッチされている別のアセンブリで例外が発生している可能性があると考えています(これを再利用可能なクラスライブラリにパッケージ化しようとしており、上記の _member はアプリケーションアセンブリのメソッドを指しています)。
デバッガーなしで小さなテスト アプリを実行すると正常に動作しますが、私のアプリケーションはもう少し堅牢であり、これが原因でトリガーされる一般的な例外処理があります。
例外を想定どおりにキャッチするために使用できる属性または何か(または、おそらく欠落しているリフレクションパラメーター)があるかどうか疑問に思っています。
更新:これは、リフレクションと MethodInfo.Invoke の使用によるものに違いないと確信しています。例外はNullReferenceExceptionの内部例外を持つ「TargetInvocationException」の最初のようです。呼び出し例外がコールスタックの外側で何らかの形で発生しているため、呼び出しスタック内でキャッチされていないようです。私はスレッドで何もしていませんが、おそらく MethodInfo.Invoke 内で何らかの暗黙のスレッド シフトが行われているのでしょうか?
これを強制的にキャッチする方法、またはこの問題を起こさないメソッド名からメソッドを呼び出す別の方法を誰かが知っていますか? 私はちょっと困惑しています。