2009-11-09 2 views
1

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

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

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

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

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

+0

Вы нашли решение? –

ответ

0

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

0

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

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

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

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

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

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

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

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

До цифры MS это, ваши варианты:

  • Фикс основную ошибку XAML.
  • Поймать исключение в App.Application_UnhandledException.