Продолжение: Неуловимое исключение, пт 2
Я пишу собственный механизм привязки; Мой конвертер вызывается до того, как DataContext установлен для целевого элемента. Само по себе это не имеет большого значения, потому что он будет обновляться, когда DataContext в конечном итоге получит значение. вызывает проблемы - это NullReferenceException, которое я получаю из-за того, что DataContext имеет значение null, которое, похоже, не хочет быть перехваченным.
Несмотря на то, что я пытаюсь поймать исключение в моем преобразователе значений:
try {
return ( (MethodInfo)_member ).Invoke( parameter, null );
} catch {
return null;
}
По какой-то причине отладчик все еще останавливается на этом этапе.
альтернативный текст http://i50.tinypic.com/2ewm6oo.png
(Это резервное копирование трассировки стека немного туда, где находится блок catch - фактическое исключение происходит внутри метода _member. Нечетная часть - блок catch неактивен, но точка останова никогда не достигается.)
Теперь я думаю, что это может быть потому, что исключение происходит в другой сборке, откуда оно перехватывается (я пытаюсь упаковать это в библиотеку классов многократного использования, и _member выше указывает на метод в сборке приложения ).
Если я запускаю свое маленькое тестовое приложение без отладчика, оно работает нормально, однако мое приложение немного более устойчиво и имеет общую обработку исключений, которая запускается из-за этого.
Мне интересно, есть ли какой-то атрибут или что-то (или, может быть, какой-то параметр отражения, который я пропускаю?), Который я могу использовать, чтобы исключение было перехвачено, как и предполагалось.
Обновление: Я почти уверен, что это должно быть из-за отражения и использования MethodInfo.Invoke. Похоже, что исключение является первым из «TargetInvocationException» с внутренним исключением из NullReferenceException. Кажется, что исключение вызова каким-то образом происходит за пределами стека вызовов и, следовательно, не перехватывается внутри него. Я ничего не делаю с потоками, но, возможно, внутри MethodInfo.Invoke происходит какое-то неявное смещение потоков?
У кого-нибудь есть идеи, как я могу заставить это быть пойманным, или, возможно, другой способ вызвать метод из имени метода, у которого не будет этой проблемы? Я немного в замешательстве.