Исключение XamlReader Silverlight 3 не обнаружено - PullRequest
1 голос
/ 09 ноября 2009

когда я использую 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 ().

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

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

Ответы [ 3 ]

0 голосов
/ 07 мая 2010

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

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

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

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

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

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

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

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

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

  • Исправить основную ошибку XAML.
  • Перехватите исключение в App.Application_UnhandledException.
0 голосов
/ 22 ноября 2009

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

...