没有捕获Silverlight 3 XamlReader异常

时间:2009-11-09 14:01:12

标签: silverlight exception silverlight-3.0 xamlreader

当我使用带有无效XAML字符串的XamlReader.Load()时,虽然在try-catch-block中出现了,但是没有捕获到结果的XAMLParseException:

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

代码是从DispatcherTimer的Tick-Event调用的,但是在像MouseLeftButtonDown这样的事件中,没有捕获异常导致我调用的行中断.Load()。

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

谢谢,Andrej

3 个答案:

答案 0 :(得分:0)

这段代码不会捕获异常是完全不可思议的。你如何确定XAMLParseException在这里发生?你确定不是来自项目中的其他一些Xaml Load吗?

答案 1 :(得分:0)

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

我知道这是一个非常晚的答案,你可能已经找到了它的解决方案,作为参考人们发现你的问题类似于他们(就像我的情况),我的答案可能仍然有用。

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

你可以改变这个:

  1. 自定义“调试”菜单,向其添加“例外”命令。
  2. 在“异常”配置中,深入查看“公共语言运行时异常”下的System.Windows.Markup.XamlParseException。
  3. 从“投掷”列中删除支票。

答案 2 :(得分:0)

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

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

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

在MS公布之前,你的选择是:

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