Исключение Silverlight 3 XamlReader не обнаружено

когда я использую XamlReader.Load() с недопустимой строкой XAML, результирующее исключение XAMLParseException не перехватывается, хотя и находится в блоке try-catch:

 try
 {
        UIElement xamlCode = XamlReader.Load(XamlText) as UIElement;
 }
 catch (Exception ex)
 {
        ErrorText = ex.Message;
 }

Код вызывается из Tick-Event DispatcherTimer, но также и в таких событиях, как MouseLeftButtonDown, исключение не перехватывается, что приводит к разрыву строки, в которой я вызываю .Load().

Кто-нибудь знает, как поймать это исключение и возобновить нормальную работу программы?

Спасибо, Андрей


person Andrej    schedule 09.11.2009    source источник


Ответы (3)


Совершенно непостижимо, что этот код не поймал исключение. Как определить, что здесь возникает XAMLParseException? Вы уверены, что это не происходит из какой-то другой загрузки Xaml в проекте?

person AnthonyWJones    schedule 22.11.2009

Всегда ли это так? или только во время отладки?

Я знаю, что это очень поздний ответ, и вы, возможно, нашли решение для него, поскольку в качестве ссылки на людей, которые находят ваш вопрос похожим на свой (например, мой случай), мой ответ все еще может быть полезен.

Если это происходит во время отладки, это может быть связано с тем, что исключение настроено для запуска.

Вы можете изменить это:

  1. Настройте меню «Отладка», добавив в него команду «Исключения».
  2. В конфигурации исключений перейдите к исключению System.Windows.Markup.XamlParseException, которое находится в разделе Исключения общеязыковой среды выполнения.
  3. Снимите галочку со столбца «Выбросить».
person Samuel DR    schedule 07.05.2010

Существуют различные операции Silverlight, которые «повторно распределяются» по отдельным потокам по предположительно различным веским и достаточным причинам. Это выглядит примерно так:

Dispatcher.BeginInvoke(() => LoadSomeXamlOrSomething());

Любое исключение, созданное в LoadSomeXamlOrSomething(), не будет перехвачено обычными блоками try/catch. Это происходит даже в SL 4 с такими вещами, как загрузка изображений в недопустимых форматах. Это раздражает, и MS должна придумать лучший способ справиться с этим, например, позволяя вам регистрировать обработчик исключений при выполнении вызова.

Пока MS не выяснит это, ваши варианты:

  • Исправьте основную ошибку XAML.
  • Перехватите исключение в App.Application_UnhandledException.
person Ken Smith    schedule 15.10.2010