从子窗口使用FolderBrowserDialog时,为什么会出现System.ComponentModel.Win32Exception?

时间:2012-04-03 09:40:09

标签: c# wpf

我的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。

1 个答案:

答案 0 :(得分:5)

关于“第一次机会异常”的一点听起来就像你在调试器中看到的那样,并且听起来你在Debug>中启用了“Break on thrown exceptions”。例外。使用该设置,一旦抛出异常,你就会闯入调试器,即使在调用堆栈的某个地方已经存在catch块(即使它实际上不会使程序崩溃) )。听起来你正在看到一个被抛出然后立即被框架捕获的异常 - 所以从你的观点来看,这是一个误报。

尝试在没有调试器的情况下运行程序(“不运行调试”菜单项,或者只需在资源管理器中双击EXE),看看程序是否真的崩溃了。如果没有,那么你知道它是误报 - 此时,你可能想要进入Debug>例外并取消选中“Thrown”列中的框,这样您就不会被这类事情搞砸了。 (出于这个原因,默认情况下取消选中“Thrown”列。)