Iworb
@Iworb
WEB-разработчик

Как показать диалог в потоке BackgroundWorker'a на WPF?

Собственно, для того, чтобы сделать это в Thread нужно задать ему SetApartmentState(ApartmentState.STA); но как подобную вещь можно проделать в фоновом потоке именно BackgroundWorker'a?
Была идея создать метод в главном окне, который бы показывал мое окошко через Dispatcher.Invoke, однако мне из диалога нужно возвращать не только DialogResult, но и текстовые поля, а для этого нужно делать либо свой класс возвращаемых данных, либо как в с++ передавать в функцию ссылку на объект через & (не уверен, что c# так может).
  • Вопрос задан
  • 482 просмотра
Решения вопроса 1
Neuroware
@Neuroware
Программист в свободное от работы время
не уверен что это поможет, но можно вызвать его через диспетчер
Dispatcher.Invoke((Action)delegate() { /* тут можно вызвать диалог
 и вообще делать все что угодно, все это будет в основном потоке */ });
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
stackoverflow.com/questions/3621150/how-can-i-crea...

"The short answer is, you can't.

Any threads used by BackgroundWorker are MTA threads, because they come from the thread pool. There is no way to change a thread from MTA to STA after it is started."
Ответ написан
Комментировать
Nipheris
@Nipheris Куратор тега C#
Может попробуем решить более общую задачу? Вам зачем показывать диалог в потоке? Что в принципе это даст?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы