FolderBrowseDialog STAThread error в фоновом режиме - PullRequest
1 голос
/ 10 февраля 2012

Добрый день,

Я получаю ошибку, очень похожую на ту, что обсуждалась здесь (среди других источников здесь и в других местах): STAThread отсутствует, но она есть

Разница в том, что в моем случае я использую многопоточность. A BackgroundWorker создает документы, и когда это будет сделано, появится FolderBrowseDialog, чтобы позволить пользователю выбрать место для сохранения сгенерированных документов. Поэтому я могу понять, почему я получаю эту ошибку. Причина, по которой я решил поместить FolderBrowseDialog в события BackgroundWorker и связанный с ними код, заключается в том, что тогда у меня есть прямой доступ к пути вместо передачи строки из одного потока в другой.

Забавно, но PrintDialog работает, но SaveFileDialog и FolderBrowseDialog выдает эту ошибку.

Я просто хотел бы услышать ваши мысли. Было бы лучше переместить FolderBrowseDialog из кода BackgroundWorker? Должен ли я реализовать пользовательский FolderBrowseDialog? Есть ли способ обойти это?

Заранее спасибо за комментарии и советы, а также всем, кто нашел время для рассмотрения моего вопроса; высоко ценится.

С уважением

1 Ответ

2 голосов
/ 10 февраля 2012

Вызывается ли FolderBrowseDialog в обратном вызове RunWorkerCompleted или вызывается в обратном вызове DoWork ? Если вы вызываете его из обратного вызова DoWork, вам нужно будет использовать SynchronizationContext , в котором был создан BackgroundWorker, и использовать метод Send , чтобы отобразить FolderBrowseDialog.

http://thedersen.com/2010/05/23/showing-modal-dialogs-from-a-background-thread/ - самый близкий пример, который я могу найти в Интернете. В этом примере класс Worker используется для хранения SynchronizationContext.

...