【问题标题】:Why do I get System.ComponentModel.Win32Exception when using a FolderBrowserDialog from a child window?为什么在子窗口中使用 FolderBrowserDialog 时会出现 System.ComponentModel.Win32Exception?
【发布时间】:2012-04-03 09:40:09
【问题描述】:

我的 WPF 应用程序由一个主窗口组成,而主窗口又具有一个子窗口。

如果我让子窗口打开一个 FolderBrowserDialog,我会得到一个 System.ComponentModel.Win32Exception(WindowsBase.dll 中发生了“System.ComponentModel.Win32Exception”类型的第一次机会异常)。更具体地说,这发生在关闭对话框之后,并且当子窗口再次获得焦点时(?)。问号在那里是因为我没有成功捕捉到异常,所以我不能 100% 确定。但从视觉上看,那就是它发生的时候。如果子窗口在关闭对话框后有焦点,则在窗口失去焦点并重新获得焦点后发生异常。

如果我将打开 folderBrowserDialog 的代码移动到主窗口,则不会发生这种情况。 ***编辑:现在它也会使程序从主窗口崩溃。

为什么会出现此异常?怎么了?我该如何修复它(除了将其移至主窗口)?

这是打开对话框的代码;没什么特别的。异常代码已删除。

 FolderBrowserDialog dlg = new FolderBrowserDialog();          
 DialogResult result = dlg.ShowDialog();

 if (result == DialogResult.OK)
    selDir = dlg.SelectedPath;

我正在使用 VS2010,.Net 4。

【问题讨论】:

标签: c# wpf


【解决方案1】:

关于“第一次机会异常”的内容听起来像是您在调试器中看到的,而且听起来您已经在“调试”>“异常”中启用了“中断抛出的异常”。使用该设置,您将在抛出异常后立即进入调试器,即使在调用堆栈的某处已经有一个catch 块(即,即使它实际上不会使您的程序崩溃)。听起来您看到一个异常被抛出,然后立即被框架捕获——所以从您的角度来看,这是一个误报。

尝试在不使用调试器的情况下运行您的程序(“运行而不调试”菜单项,或者只需在资源管理器中双击您的 EXE),看看程序是否真的崩溃了。如果没有,那么您就知道这是误报——此时,您可能需要进入 Debug > Exceptions 并取消选中“Thrown”列中的框,这样您就不会被这种事情困扰了。 (因此,默认情况下“Thrown”列未选中。)

【讨论】:

  • 好主意!我没有想过要尝试。测试结果:不幸的是,程序在没有调试的情况下运行时冻结。真的真的很烦人。我非常希望取消选中一些异常可以做到这一点。
  • 我只在调试模式下遇到了同样的问题,并且应用程序在没有调试的情况下运行正常。但即使我取消选中所有框,我仍然无法在调试模式下运行它。并得到同样的例外。你有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-23
  • 2023-03-23
相关资源
最近更新 更多