Estoy obteniendo InvalidCastException al azar cuando se muestra FolderBrowserDialog y también muchos clientes han informado esto.WinForms: ¿Por qué obtengo InvalidCastException al mostrar el cuadro de diálogo del navegador de carpetas?
No he podido encontrar nada relevante en internet. ¿Alguien sabe qué causa esto/cómo solucionar esto?
Mi código:
using (FolderBrowserDialog fbd = new FolderBrowserDialog())
{
fbd.ShowNewFolderButton = false;
if (fbd.ShowDialog() == DialogResult.OK)
Seguimiento de la pila:
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()
EDIT: Información adicional: He sido capaz de reproducir esto sólo cuando se ejecuta en depurador VS2008.
Cuando se queda sin depurador, ocurre muy raramente (sucedió una o dos veces en 6 meses) en mi Windows 7 de 64 bits y desaparece después de reiniciar.
Los clientes ciertamente no están ejecutando la aplicación en el depurador por lo que seguramente es reproducible de depurador.
Guau, eso es raro. Ese código parece perfectamente inofensivo. ¿Intentó actualizar o degradar .NET? – Thomas
¿Llamas al 'FolderBrowserDialog' de un hilo que no sea el del UI? –
@Thomas: No, y no intentaré eso ni puedo pedirle a ninguno de los usuarios que lo hagan – Marek