【发布时间】:2011-02-18 04:51:45
【问题描述】:
我在显示 FolderBrowserDialog 时随机收到 InvalidCastException,并且许多客户也报告了此问题。
我无法在互联网上找到任何相关内容。有谁知道这是什么原因/如何解决这个问题?
我的代码:
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
{
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog() == DialogResult.OK)
堆栈跟踪:
Error: System.InvalidCastException:
'Unable to cast object of type 'System.__ComObject' to type 'IMalloc'.'.
Stack trace:
at System.Windows.Forms.UnsafeNativeMethods.Shell32.SHGetMalloc(IMalloc[] ppMalloc)
at System.Windows.Forms.FolderBrowserDialog.GetSHMalloc()
at System.Windows.Forms.FolderBrowserDialog.RunDialog(IntPtr hWndOwner)
at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner)
at System.Windows.Forms.CommonDialog.ShowDialog()
编辑:附加信息:只有在 VS2008 调试器中运行时,我才能重现这一点。
当调试器用完时,它在我的 64 位 Windows 7 上很少发生(在 6 个月内发生一次或两次),并且在重新启动后消失。
客户端肯定没有在调试器中运行应用程序,因此它肯定可以在调试器之外重现。
【问题讨论】:
-
哇,这很奇怪。该代码看起来完全无害。您是否尝试升级或降级 .NET?
-
您是从 UI 线程以外的线程调用
FolderBrowserDialog吗? -
@Thomas:不,我不会尝试,也不能要求任何用户这样做
-
@João:不。直接来自 UI 线程。
-
我问是因为这看起来(对我来说)可能是一个框架错误。特别是如果您在 UI 线程上。如果您不愿意排除该选项,请适合自己:)
标签: c# winforms .net-2.0 folderbrowserdialog