FolderBrowserDialog - Произошло исключение Win32Exception - Неверный параметр - PullRequest
8 голосов
/ 09 августа 2010

Я пытаюсь использовать FolderBrowserDialog из WPF следующим образом:

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

При использовании «прерывания по исключению» в Visual Studio 2010 я получаю исключение после закрытия диалогового окна в вызове ShowDialog ().Мне любопытно, почему это происходит.

Исключение: Win32Exception
Сообщение: неверный параметр
Stacktrace: в MS.Win32.UnsafeNativeMethods.SetFocus (HandleRef hWnd)

Обновление
Я также пытался установить родителя явно, но, тем не менее, было сгенерировано исключение.

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

Ответы [ 3 ]

9 голосов
/ 09 сентября 2011

Это всего лишь немного гадости взаимодействия. Код WPF пытается установить фокус обратно на главное окно, когда диалоговое окно закрывается. Проблема в том, что диалоговое окно отключило окно, поэтому оно еще не может получить фокус. WPF слишком стремится изменить фокус и ничего не знает о поведении диалога. На самом деле все идет не так, как надо.

0 голосов
/ 09 сентября 2011

Я бы попробовал сделать это без использования оператора "using", возможно, он слишком быстро очищается.

0 голосов
/ 10 мая 2011

Полагаю, вам нужен хост Windows Forms для запуска чего-либо из пространства имен Windows.Forms ... попробуйте!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...