2010-08-09 9 views
8

Ich versuche, die Folder von WPF wie folgt zu verwenden:Folder - Win32Exception aufgetreten - der Parameter ist falsch

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; 
    } 
} 

Bei der Verwendung von „brechen auf Ausnahme“ in Visual Studio 2010 ich eine Ausnahme nach dem Schließen des Dialogs erhalte in der Aufruf ShowDialog(). Ich bin neugierig, warum das passiert.

Ausnahme: Win32Exception
Nachricht: Der Parameter ist falsch
Stacktrace: bei MS.Win32.UnsafeNativeMethods.SetFocus (HandleRef hWnd)

aktualisieren
Ich versuchte auch explizit die Eltern zu setzen, aber die Ausnahme wurde trotzdem geworfen.

+0

Gibt es noch mehr dazu? Verwenden Sie andere Formulare in Ihrer App? Das Testen in einer leeren WPF-App löst keine Ausnahmen aus und läuft einwandfrei. –

+0

Ich erstellte eine leere Testanwendung mit nur dieser Funktion und einem Aufruf dieser Funktion, und die Ausnahme tritt auf. Sie müssen "Break on exception" in Visual Studio 2010 aktivieren, um die Anwendung zu sehen (Debug-> Exceptions ...-> Checkboxes) – testalino

+0

Sie müssen den Wert der StackTrace-Eigenschaft der Exception anzeigen. –

Antwort

-1

Ich glaube, Sie brauchen einen Windows Forms Host, um irgendetwas aus dem Windows.Forms Namespace auszuführen ... probieren Sie es aus!

+0

die Windows-Formulare Host-Steuerelement/Komponente ist in der Toolbox btw –

+0

Putting ein Windows Forms-Host in einem WPF-Fenster hat nicht geholfen. –

+1

Nein, Sie benötigen keinen Windows Forms Host ... –

0

Ich würde versuchen, es zu tun, ohne die "using" -Anweisung zu verwenden, vielleicht wird es zu schnell aufgeräumt.

9

Dies ist nur ein wenig Interop Gemeinheit. Der WPF-Code versucht, den Fokus auf das Hauptfenster zurückzusetzen, wenn das Dialogfeld geschlossen wird. Problem ist, der Dialog hat das Fenster deaktiviert, so dass es den Fokus noch nicht erhalten kann. WPF ist zu eifrig, den Fokus zu ändern und weiß nichts über das Dialogverhalten. Nichts geht wirklich schief.

Verwandte Themen