c# - 为什么我在打开然后关闭窗口上的菜单时收到 InvalidCastException?
问题描述
当我在 NET Framework 4.7.2 中创建一个新的 WPF 应用程序时,向 MainWindow 添加一个菜单,InvalidCastException
每当您单击菜单然后单击离开菜单以将其关闭时,我都会得到。
当它被抛出时我可以忽略这个异常PresentationFramework.dll
,一切都很好我只是对这是一个 NET Framework 问题还是我做错了什么感兴趣?
完整的解决方案可以在这里找到https://github.com/glrad/InvalidCastException
应用程序.xaml.cs
protected override void OnStartup(StartupEventArgs e)
{
var view = new MainWindow();
MainWindow = view;
view.Show();
}
主窗口.xaml
<Window x:Class="MyApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="GASGC3" Height="800" Width="1000">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Menu Grid.Row="0">
<MenuItem Header="File">
<MenuItem Header="Options" InputGestureText="Ctrl+O"/>
<Separator/>
<MenuItem Header="Exit" InputGestureText="Alt+F4" />
</MenuItem>
<MenuItem Header="Help">
<MenuItem Header="About" />
</MenuItem>
</Menu>
</Grid>
</Window>
抛出异常:
System.InvalidCastException:'无法将'System.Collections.Hashtable'类型的对象转换为'System.String'类型。'
解决方案
您似乎看到了此异常,因为您更改了 Visual Studio 中的异常设置并启用了 CLR 异常。
如果您选中Break when throw: Common Language Runtime Exceptions,那么您将看到捕获的异常,否则将永远不会冒泡给用户。这些异常是正常的。
仅当您很难跟踪以查找错误时,才应启用对 CLR 异常的中断。通常你甚至设置一个断点,在关闭 CLR 异常的情况下启动应用程序(以避免一直遇到它们),然后,当断点被命中时,选中此选项并继续仅测试特定代码。通常你会这样做,如果你想在 try-catch 语句中看到你已经处理和吞下的异常。
请注意,这显示了已处理的异常,所以不要担心它们。
推荐阅读
- android - 如何从 SQLite 数据库中检索声音?
- mysql - MySQL:计算列中的宽度日期
- javascript - NodeJs Express - 如何返回 HTTP 错误代码 (400,401,500) 和 JSON 对象
- javascript - jQuery 读取 .txt 文件但获取特定数据
- python - 使用 PyMC3 运行贝叶斯伽马回归的难度
- swift - 使用 Alamofire 随机获取 NSURLErrorDomain Code = -1206
- node.js - webpack 错误:自定义关键字定义无效:数据/错误应该是布尔值
- angular - 对象复制问题
- .net - 如何让我的单元测试绕过我的 .NET Web 控制器上的 Authorize 标记
- php - 主题的 wp-options 中的 Wordpress 阿拉伯语类别名称问题