2012-04-03 47 views
4

我的WPF应用程序由一个主窗口组成,而主窗口又有一个子窗口。为什么从子窗口使用FolderBrowserDialog时会出现System.ComponentModel.Win32Exception?

如果我让子窗口打开一个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

[FolderBrowserDialog - Win32Exception发生 - 参数不正确]的可能重复(http://stackoverflow.com/questions/3438985/folderbrowserdialog-win32exception-occurred - 参数是不正确的) – 2012-04-03 12:22:32

回答

5

关于“第一次机会异常”位听起来像你看到的是在调试器,也听起来像是你已经启用了“歇在调试>异常中引发异常“。使用该设置,即使在调用堆栈的某个位置已经有一个catch块(即,即使它不会实际上导致程序崩溃),也会在抛出异常时立即进入调试器。这听起来像是你看到一个异常被抛出,然后立即被框架捕获 - 所以从你的角度来看,这是一个误报。

尝试在没有调试器的情况下运行你的程序(“Run without debugging”菜单项,或者只需在Explorer中双击你的EXE),看看程序是否真的崩溃。如果没有,那么你知道这是一个误报 - 在这一点上,你可能想要进入Debug> Exceptions并取消选中“Thrown”列中的方框,这样你就不会再受到这种事情的困扰。 (由于这个原因,默认情况下,“Thrown”列未被选中。)

+0

好主意!我没有想过尝试。测试结果:不幸的是程序在没有调试的情况下运行时会冻结。真的很刺激。我非常希望能够取消某些例外情况。 – AnnaR 2012-04-05 07:26:59

+0

我只有在调试模式下有同样的问题,并且在没有调试的情况下运行时应用程序工作正常。但即使我没有选中所有的框,我仍然无法在调试模式下运行它。并获得相同的例外。你有什么建议吗? – IBRA 2016-06-15 11:39:20

相关问题