c# - Try-Catch 未知行为

标签 c# .net xaml user-controls try-catch

我目前正在学习一本关于如何在运行时将 xaml 代码转换为对象的书。

我有以下代码:

try
{
    ctrl = XamlReader.Load(xaml) as UserControl;
}
catch (Exception exc)
{
    OnXamlResult(new XamlCruncherEventArgs(exc.Message)); return;
}

代码不是我的,我从书上拿来的。

问题是 try-catch 不能正常工作,或者至少据我所知到目前为止是这样。 在调试过程中,程序在到达以下行时停止:

ctrl = XamlReader.Load(xaml) as UserControl;

没有捕获异常。

我做错了什么或者如何解决这个问题?

“xaml”是一个字符串。它取自文本框,如果用户正确键入 xaml,则程序应将 xaml 代码转换为对象,否则应显示相应的错误。

关于程序如何 react ,我可以说调试停止了(它返回到 Visual Studio 指出错误)并且它的行为不像进入无限循环。

最佳答案

这可能是调试器在异常发生时中断。在 catch 内设置一个断点,然后按 F5 继续,它应该继续执行并命中断点。

通过“破坏”,我并不是说它失败了,我的意思是它会在异常的有问题的行上暂停应用程序的执行,所以在这种情况下这是一件好事。

如果您使用的是 Visual Studio,则可以启用/禁用此“异常中断”行为:

  • 调试 -> 异常...(Ctrl + Alt + E)
  • 公共(public)语言运行时异常(exception),根据需要选中右侧的复选框。

至于异常本身,除非它专门用于显示异常,否则加载提供的 XAML 字符串时可能会遇到问题。

关于c# - Try-Catch 未知行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121943/

相关文章:

c# - DynamoDB 自动转换特殊字符

c# - 什么是IndexOutOfRangeException/ArgumentOutOfRangeException,如何解决?

c# - 如何在 C#.net 的不同机器上的两个独立的 winform 应用程序之间传递值

c# - AvalonDock MVVM 锚定位置

c# - 透明面板位于另一个普通面板之上

c# - 无法在 iOS 版 Unity 游戏中调用 GameCenter

c# - ASP.Net Core 中间件无法设置异常状态码,因为 "response has already started"

c# - 为什么不指定“ref”就可以从方法更改Struct的int []属性?

WPF - 使动画的执行以绑定(bind)数据项的属性为条件

c# - 将焦点设置回其父级?