2012-04-03 3 views
4

Приложение WPF состоит из главного окна, которое, в свою очередь, имеет дочернее окно.Почему я получаю System.ComponentModel.Win32Exception при использовании FolderBrowserDialog из дочернего окна?

Если я разрешаю дочернему окну открыть FolderBrowserDialog, я получаю System.ComponentModel.Win32Exception (в WindowsBase.dll произошла первая случайная ошибка типа «System.ComponentModel.Win32Exception»). Более конкретно это происходит после закрытия диалога, и когда дочернее окно снова получает фокус (?). Вопросительный знак есть, потому что мне не удалось поймать исключение, поэтому я не уверен на 100%. Но визуально, то есть когда это происходит. Если дочернее окно имеет фокус после закрытия диалогового окна, исключение возникает после того, как окно теряет фокус, а его восстанавливает.

Если я переведу код, открывающий папкуBrowserDialog в главное окно, этого не произойдет. *** РЕДАКТИРОВАТЬ: Теперь он также выдает программу из главного окна.

Почему у меня такое исключение? Что происходит? Как я могу его исправить (кроме перемещения в главное окно)?

Вот код, открывающий диалог; ничего экстраординарного. Код исключений удален.

FolderBrowserDialog dlg = new FolderBrowserDialog();   
DialogResult result = dlg.ShowDialog(); 

if (result == DialogResult.OK) 
    selDir = dlg.SelectedPath; 

Я использую VS2010, .Net 4.

+1

Возможный дубликат [FolderBrowserDialog - Win32Exception произошло - параметр неверен] (http://stackoverflow.com/questions/3438985/folderbrowserdialog-win32exception-occurred -the-parameter-is-wrong) –

ответ

5

Бит о «первом случайном исключении» звучит, как вы видите это в отладчике, а также звучит, как вы включили «Break на отброшенных исключениях "в Debug> Исключения. С этим параметром вы перейдете в отладчик, как только будет выбрано исключение, даже если уже есть блок catch для него где-то в стеке вызовов (т. Е. Даже если это не приведет к сбою вашей программы). Похоже, что вы видите исключение, которое бросается, а затем сразу попадает в рамки - так, с вашей точки зрения, это ложный позитив.

Попробуйте запустить программу без отладчика (пункт меню «Запустить без отладки» или просто дважды щелкните EXE в проводнике) и посмотрите, действительно ли программа аварийно завершает работу. Если это не так, то вы знаете, что это ложный позитив. В этот момент вы можете перейти в «Отладка»> «Исключения» и снять флажки в столбце «Брошенный», чтобы вы перестали прослушиваться такими вещами. (По этой причине столбец «Брошенный» не установлен по умолчанию.)

+0

Отличная идея! Я не думал об этом. Результат теста: К сожалению, программа зависает при запуске без отладки. На самом деле очень раздражает. Я так надеялся, что снятие некоторых исключений сделает это. – AnnaR

+0

У меня такая же проблема только в режиме отладки, и приложение отлично работает при работе без отладки. но даже когда я снял все флажки, я все равно не могу запустить его в режиме отладки. и получение того же исключения. Есть ли у вас какие-либо предложения? – IBRA

Смежные вопросы