2010-08-09 17 views
8

trato de usar la FolderBrowserDialog de WPF como esto:FolderBrowserDialog - Win32Exception ocurrió - el parámetro es incorrecto

public static bool BrowseFolder(out string folderName) 
{ 
    using (System.Windows.Forms.FolderBrowserDialog dlg = new System.Windows.Forms.FolderBrowserDialog()) 
    { 
     var result = dlg.ShowDialog(); 
     folderName = dlg.SelectedPath; 
     return result == System.Windows.Forms.DialogResult.OK; 
    } 
} 

Cuando se utiliza "Break on excepción" en Visual Studio 2010 obtengo una excepción después de cerrar el diálogo en la llamada ShowDialog(). Tengo curiosidad por qué ocurre esto.

Excepción: Win32Exception
Mensaje: El parámetro es incorrecto
StackTrace: en MS.Win32.UnsafeNativeMethods.SetFocus (HandleRef CVent)

actualización
También traté de establecer la matriz de forma explícita, pero la excepción fue lanzada de todos modos.

var w = new System.Windows.Interop.WindowInteropHelper(parent); 
System.Windows.Forms.IWin32Window i = new WindowWrapper(w.Handle); 
result = dlg.ShowDialog(i); 
+0

¿Hay algo más en esto? ¿Utiliza alguna otra forma en su aplicación? Probar esto en una aplicación WPF en blanco no genera excepciones y funciona bien. –

+0

Creé una aplicación de prueba vacía con solo esa función y una llamada a esa función y se produce la excepción. Debe activar "Break on exception" en Visual Studio 2010 para ver la aplicación (Depurar-> Excepciones ...-> Casillas de verificación) – testalino

+0

Debe mostrar el valor de la propiedad StackTrace de la excepción. –

Respuesta

-1

Yo belive que necesita un Windows Forms host para ejecutar cualquier cosa, desde el espacio de nombres Windows.Forms ... probarlo!

+0

el controlador/componente de host de Windows está en la Caja de herramientas por cierto –

+0

Poner un host de Windows Forms en una ventana de WPF no ayudó. –

+1

No, no necesita un host de Windows Forms ... –

0

Intentaré hacerlo sin utilizar la instrucción "using", quizás se esté limpiando demasiado rápido.

9

Esto es solo un poco de mal gusto interoperativo. El código WPF intenta volver a enfocar la ventana principal cuando se cierra el cuadro de diálogo. El problema es que el diálogo ha desactivado la ventana para que no pueda recibir el foco todavía. WPF está demasiado ansioso por cambiar el enfoque y no sabe nada sobre el comportamiento del diálogo. Nada realmente sale mal

Cuestiones relacionadas