2009-11-09 9 views
1

quand j'utilise XamlReader.Load() avec une chaîne XAML non valide, le résultat XamlParseException n'est pas pris bien beeing dans un try-catch-block:Silverlight 3 XamlReader Exception non pris

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

Le code est appelé à partir de l'événement Tick d'un DispatcherTimer, mais également dans des événements tels que MouseLeftButtonDown, l'exception n'est pas interceptée, ce qui entraîne une rupture dans la ligne où j'appelle .Load().

Est-ce que quelqu'un sait comment attraper cette exception et reprendre l'activité normale du programme?

Merci, Andrej

+0

Avez-vous trouvé une solution? –

Répondre

0

Il est tout à fait incompréhensible que ce code ne serait pas attraper l'exception. Comment déterminez-vous que l'exception XAMLParseException se produit ici? Êtes-vous sûr de ne pas provenir d'une autre charge de Xaml dans le projet?

0

Est-ce toujours le cas? ou seulement pendant le débogage? Je suis conscient que c'est une réponse extrêmement tardive et vous pourriez avoir trouvé la solution, car comme référence aux personnes trouvant votre question semblable à leur (comme mon cas), ma réponse pourrait toujours être utile.

Si cela se produit pendant le débogage, c'est peut-être parce que l'exception est configurée pour être lancée.

Vous pouvez modifier ceci:

  1. Personnaliser le menu Debug, ajouter la commande "Exceptions" à elle.
  2. Dans la configuration Exceptions, accédez à System.Windows.Markup.XamlParseException, sous Common Language Runtime Exceptions.
  3. Retirer la vérification de la colonne "Throw".
0

Il existe diverses opérations Silverlight qui sont "remilitarisées" sur des threads distincts pour ce qui sont probablement des raisons différentes, bonnes et suffisantes. Il ressemble un peu à ceci:

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

Toute exception levée dans les LoadSomeXamlOrSomething() ne seront pas pris par des blocs try/catch normales. Cela arrive même dans SL 4 avec des choses comme le chargement d'images avec des formats invalides. C'est ennuyeux, et MS doit trouver une meilleure façon de gérer cela, par exemple, en vous laissant enregistrer un gestionnaire d'exception lorsque vous faites l'appel.

Jusqu'à chiffres MS ceci, vos options sont:

  • corriger l'erreur XAML sous-jacente. Saisissez l'exception dans App.Application_UnhandledException.