【问题标题】: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】:
总是这样吗?还是只在调试时?
我知道这是一个非常晚的答案,您可能已经找到了解决方案,作为参考人们发现您的问题与他们的问题相似(如我的案例),我的回答可能仍然有用。
如果它在调试时发生,可能是因为配置了异常。
你可以改变这个:
- 自定义“调试”菜单,向其中添加“例外”命令。
- 在 Exceptions 配置中,深入到 System.Windows.Markup.XamlParseException,它位于 Common Language Runtime Exceptions 下。
- 从“投掷”列中取消勾选。
【解决方案3】:
有各种 Silverlight 操作被“重新编组”到单独的线程上,这可能是出于各种好的和充分的理由。它看起来像这样:
Dispatcher.BeginInvoke(() => LoadSomeXamlOrSomething());
任何在 LoadSomeXamlOrSomething() 中抛出的异常都不会被普通的 try/catch 块捕获。即使在 SL 4 中也会发生这种情况,例如加载格式无效的图像。这很烦人,MS 需要想出一个更好的方法来处理这个问题,例如,让您在拨打电话时注册一个异常处理程序。
在 MS 弄清楚这一点之前,您的选择是:
- 修复底层 XAML 错误。
- 在 App.Application_UnhandledException 中捕获异常。