Почему я получаю System.ComponentModel.Win32Exception при использовании FolderBrowserDialog из дочернего окна? - PullRequest
4 голосов
/ 03 апреля 2012

Мое приложение WPF состоит из главного окна, которое, в свою очередь, имеет дочернее окно.

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

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

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

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

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

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

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

1 Ответ

5 голосов
/ 04 апреля 2012

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

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

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