saveFileDialog Долгое ожидание подтверждения "Okay" - PullRequest
2 голосов
/ 06 февраля 2012

Я пишу в Visual Studio 2008 с использованием C # (если это имеет значение), и у меня есть следующий фрагмент кода:

if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    //Write Stuff to File Here
}

Какое-то время я думал, что мой код, который написал файл, работает вечно, однако после отладки кажется, что потребуется вечность (от 5 до 10 секунд) только для перехода между оператором «if» и первой скобкой первого кода внутри "если".

Что-то я делаю не так? Есть ли разница между созданием объекта saveFileDialog в пользовательском интерфейсе и созданием его на лету (с помощью кода)? Будет ли это иметь значение, если не будет выражения "else"?

Любые мысли или идеи будут с благодарностью!

1 Ответ

1 голос
/ 06 февраля 2012

Это не является необычным, на многих машинах тонна DLL загружаются в ваш процесс, когда вы используете этот диалог. Вы можете видеть, как они загружаются, используя Project + Properties, вкладку Debug, отметьте флажок «Включить отладку неуправляемого кода». Окно «Вывод» показывает трассировку каждой DLL, попадающей в вашу программу.

Это расширения оболочки, настройки для Explorer. Используемое вами диалоговое окно является оболочкой, вы наверняка узнаете сходство с обычными представлениями Проводника. Такие вещи, как значки и контекстные меню, ведут себя одинаково. Наличие множества расширений оболочки является обычным явлением на машинах разработчика, в большей степени, чем на пользовательских машинах. Их много, предлагая такие удобства, как интеграция любого инструмента, который вы хотели бы использовать с самим проводником.

Отладка проблемы не так проста, у вас не будет фактического исходного кода для этих расширений. Вы можете получить подсказку о нарушителе из трассировки в окне вывода. Если после одной конкретной DLL есть длительная пауза, то есть вероятность, что эта DLL является источником проблемы. Ничего толкового, хотя.

Лучше всего использовать утилиту автозапуска SysInternals. Он показывает, какие именно расширения оболочки установлены, и позволяет отключить их, просто установив флажок. Начните отключать все, что не имеет авторских прав Microsoft, и вещи, без которых вы могли бы жить. Выйти + Войти, чтобы изменения вступили в силу.

...