1

当我将 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() 的行中断。

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

谢谢,安德烈

4

3 回答 3

0

这段代码无法捕捉到异常是完全不可思议的。您如何确定 XAMLParseException 发生在这里?您确定不是来自项目中的其他 Xaml 负载吗?

于 2009-11-22T16:16:41.290 回答
0

总是这样吗?或仅在调试时?

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

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

你可以改变这个:

  1. 自定义“调试”菜单,向其中添加“例外”命令。
  2. 在 Exceptions 配置中,深入到 System.Windows.Markup.XamlParseException,它位于 Common Language Runtime Exceptions 下。
  3. 从“投掷”列中删除检查。
于 2010-05-07T14:13:42.317 回答
0

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

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

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

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

  • 修复基础 XAML 错误。
  • 在 App.Application_UnhandledException 中捕获异常。
于 2010-10-15T18:20:29.327 回答