【问题标题】:Silverlight 3 XamlReader Exception not caughtSilverlight 3 XamlReader 异常未捕获
【发布时间】:2009-11-09 14:01:12
【问题描述】:

当我将 XamlReader.Load() 与无效的 XAML 字符串一起使用时,虽然在 try-catch-block 中蜂鸣,但不会捕获生成的 XAMLParseException:

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

代码是从 DispatcherTimer 的 Tick-Event 调用的,但在 MouseLeftButtonDown 等事件中也不会捕获异常,导致我调用 .Load() 的行中断。

有谁知道如何捕捉这个异常并恢复正常的程序活动?

谢谢,安德烈

【问题讨论】:

    标签: silverlight exception silverlight-3.0 xamlreader


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      如果它在调试时发生,可能是因为配置了异常。

      你可以改变这个:

      1. 自定义“调试”菜单,向其中添加“例外”命令。
      2. 在 Exceptions 配置中,深入到 System.Windows.Markup.XamlParseException,它位于 Common Language Runtime Exceptions 下。
      3. 从“投掷”列中取消勾选。

      【讨论】:

        【解决方案3】:

        有各种 Silverlight 操作被“重新编组”到单独的线程上,这可能是出于各种好的和充分的理由。它看起来像这样:

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

        任何在 LoadSomeXamlOrSomething() 中抛出的异常都不会被普通的 try/catch 块捕获。即使在 SL 4 中也会发生这种情况,例如加载格式无效的图像。这很烦人,MS 需要想出一个更好的方法来处理这个问题,例如,让您在拨打电话时注册一个异常处理程序。

        在 MS 弄清楚这一点之前,您的选择是:

        • 修复底层 XAML 错误。
        • 在 App.Application_UnhandledException 中捕获异常。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-09-28
          • 2012-05-31
          相关资源
          最近更新 更多