2016-01-02 2 views
1

Я хочу найти папку в скрипте LINQPad, поэтому я попытался использовать FolderBrowserDialog. Это не сработало.Как отобразить FolderBrowserDialog в LINQPad?

Вот фрагмент, показывающий, что я делаю?

string path = ""; 
var browser = new FolderBrowserDialog { ShowNewFolderButton = false }; 
if (browser.ShowDialog() == DialogResult.OK) 
{ 
    path = browser.SelectedPath; 
} 

Это работает и висит на линии с ShowDialog() с желтым указателем выполнения против этой линии, но диалог папки браузера не виден.

Я знаю, что есть перегрузка для ShowDialog(), которая принимает аргумент IWin32Window owner и думает, что это может быть решение, но еще не выяснили, как получить окно IWin32Window для основного окна LINQPad. Я надеялся, что класс Util может обеспечить способ, но если я не пропущу его, похоже, это не так.

У кого-нибудь есть советы по решению этой проблемы?

+1

Не происходит здесь. Ваш код работает без проблем – Steve

+0

Darn. Я боялся этого. Я иногда подключаю свой iPad в качестве второго экрана. Лучше проверить, нет ли фантомного экрана, который открывает диалог. –

+0

В настройках дисплея отображается только один монитор, в то время как iPad не подключен, так что это не так. Попробовал Alt-Space, чтобы открыть системное меню в диалоговом окне, но оно открывается для самой LINQPad. –

ответ

2

Установка параметра Run each query in its own process в значение true является причиной проблемы. Установка этой опции на значение false по умолчанию позволяет использовать код, описанный выше, как ожидалось.

Однако внесение этого изменения отключает встроенную отладку. Кроме того, поведение по-прежнему проблематично.

При первом запуске скрипта отображается диалоговое окно, и сценарий завершается после того, как выбрано «ОК» или «Отмена». Однако при запуске скрипта второй раз он зависает, как описано в вопросе. После отмены выполнения и запуска его снова открывается диалоговое окно, но по истечении этого времени оно снова зависает и так далее.

Было указано, что установка опции Always use fresh application domains может решить эту проблему, и это позволяет, чтобы диалог отображался при каждом выполнении сценария.

+0

Попробуйте включить «Всегда использовать свежий appdomain» в настройках и посмотреть, поможет ли это. –

+0

Это действительно так. Благодарю. –

+0

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