未捕获Silverlight 3 XamlReader异常

未捕获Silverlight 3 XamlReader异常,silverlight,exception,silverlight-3.0,xamlreader,Silverlight,Exception,Silverlight 3.0,Xamlreader,当我将XamlReader.Load()与无效的XAML字符串一起使用时,不会捕获生成的XAMLParseException,尽管它位于try-catch块中: try { UIElement xamlCode = XamlReader.Load(XamlText) as UIElement; } catch (Exception ex) { ErrorText = ex.Message; } 代码是从Dispatchermer的Tick事件调用的,

当我将XamlReader.Load()与无效的XAML字符串一起使用时,不会捕获生成的XAMLParseException,尽管它位于try-catch块中:

 try
 {
        UIElement xamlCode = XamlReader.Load(XamlText) as UIElement;
 }
 catch (Exception ex)
 {
        ErrorText = ex.Message;
 }
代码是从Dispatchermer的Tick事件调用的,但在MouseLeftButtonDown之类的事件中也会调用。不会捕获异常,从而导致调用.Load()的行中断

有人知道如何捕获此异常并恢复正常的程序活动吗


谢谢,Andrej

这段代码无法捕获异常,这是完全无法理解的。如何确定这里发生了XAMLParseException?您确定不是来自项目中的其他Xaml加载吗?

总是这样吗?还是只在调试时使用

我知道这是一个非常晚的答案,您可能已经找到了解决方案,因为对于那些发现您的问题与他们的问题相似的人(如我的案例),我的答案可能仍然有用

如果它发生在debuggin时,可能是因为exeption被配置为抛出

您可以更改此设置:

  • 自定义调试菜单,向其添加“异常”命令
  • 在异常配置中,深入到System.Windows.Markup.XamlParseException,它位于公共语言运行时异常下
  • 从“抛出”列中删除复选框
    有各种Silverlight操作被“重新编组”到单独的线程上,原因可能有各种各样的原因。看起来有点像这样:

    Dispatcher.BeginInvoke(() => LoadSomeXamlOrSomething());
    
    LoadSomeXamlOrSomething()中引发的任何异常都不会被正常的try/catch块捕获。这种情况甚至在SL4中也会发生,比如加载格式无效的图像。这很烦人,微软需要想出一个更好的方法来处理这个问题,例如,让你在打电话时注册一个异常处理程序

    在MS解决这个问题之前,您的选择是:

    • 修复基本的XAML错误
    • 捕获App.Application\u UnhandledException中的异常