Хобрук: Ваш путь к мастерству в программировании

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

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

Если я позволю дочернему окну открыть 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.

03.04.2012


Ответы:


1

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

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

04.04.2012
  • Отличная идея! Я не думал о том, чтобы попробовать это. Результат теста: К сожалению, программа зависает при запуске без отладки. Действительно очень раздражает. Я так надеялся, что снятие флажка с некоторыми исключениями сделает это. 05.04.2012
  • У меня такая же проблема только в режиме отладки, а при запуске без отладки приложение работает нормально. но даже когда я снял все флажки, я все равно не могу запустить его в режиме отладки. и получаю такое же исключение. У Вас есть какие-то предложения? 15.06.2016
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..