получить исключение при показе System.Windows.Forms.FolderBrowserDialog в wpf - PullRequest
2 голосов
/ 09 июля 2011

Я пытался показать folderbrowserdialog в wpf, но получил это исключение

Для выполнения OLE-вызовов текущий поток должен быть переведен в однопотоковый режим (STA).Убедитесь, что на вашей главной функции помечен атрибут STAThreadAttribute.Это исключение возникает только в том случае, если к процессу присоединен отладчик

Я пытался добавить [STAThread] перед этой функцией, но без изменений, как я могу устранить это исключение?

Функцияэто:

private void Save_any_File()
        {
            System.Windows.Forms.FolderBrowserDialog get_location = new System.Windows.Forms.FolderBrowserDialog();
            get_location.ShowDialog();
        }

Ответы [ 2 ]

1 голос
/ 09 июля 2011

Ваша функция Main () уже имеет атрибут [STAThread], она скрыта в автоматически сгенерированном коде для WPF.Это ни на что не влияет, кроме как на метод Main ().Это гарантирует, что основной поток приложения WPF (он же поток пользовательского интерфейса) создает «однопоточную квартиру».Это делается CLR до запуска любого кода в вашем приложении.

STA является жестким требованием для потоков пользовательского интерфейса, так как это требуется для многих компонентов COM.STA обеспечивает безопасный дом для программного обеспечения, которое не является поточно-ориентированным.При этом «однопоточный».OpenFileDialog - это один из таких компонентов, другие - поддержка буфера обмена и перетаскивания.

И многие, многие COM-компоненты, которые пытаются найти дом в вашем приложении.В случае OpenFileDialog это расширения оболочки, которые настраивают внешний вид представления папки.

Короче говоря, проблема, несомненно, заключается в том, что вы пытаетесь отобразить диалоговое окно в рабочем потоке.Не могу сделать.Используйте Dispatcher.BeginInvoke () для перенаправления вызовов в поток пользовательского интерфейса.

0 голосов
/ 09 июля 2011

Этот пост может быть полезным.Это диалоговое окно Windows Forms, обычно вам требуется WindowsFormHost или другой метод взаимодействия.

...