Как показать диалог в потоке BackgroundWorker'a на WPF?
Собственно, для того, чтобы сделать это в Thread нужно задать ему SetApartmentState(ApartmentState.STA); но как подобную вещь можно проделать в фоновом потоке именно BackgroundWorker'a?
Была идея создать метод в главном окне, который бы показывал мое окошко через Dispatcher.Invoke, однако мне из диалога нужно возвращать не только DialogResult, но и текстовые поля, а для этого нужно делать либо свой класс возвращаемых данных, либо как в с++ передавать в функцию ссылку на объект через & (не уверен, что c# так может).
Да, так можно, но при этом Dispatcher нужно вызывать от объекта окна, которое может рисовать, например главного. Поэтому, только передавая его в качестве параметра можно нормально работать. В целом, можно назвать это решением за отсутствием других нормальных.
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."
Станислав Макаров: Авторизация состоит из POST запроса и JSON ответов, занимая неопределенное время. Чтобы программа была доступна я и выполняю его в отдельном потоке. Метод авторизации привязан к классу из которого выполняется. Подскажите тогда как вызвать его асинхронно, может это именно то, что мне надо.
Iworb вполне вероятно. Назовите http-клиент, которым пользуетесь (в смысле какой класс используете для выполнения запросов), и посмотрим, что у него есть асинхронного
Iworb а как response получаете? просто вот есть асинхронный метод, https://msdn.microsoft.com/en-us/library/hh138534%... , возвращает Task, значит можно async/await, без блокировок. BeginInvoke никаких не надо, это способ запустить синхронный метод в другом потоке, вам он не нужен, если сам класс предоставляет асинхронный вариант. Это кстати вопрос от 2009 года, тогда никакими Task-ами еще и не пахло, а сейчас они повсеместно используются. Всегда пробуйте искать у класса парный Async-метод (GetRespose/GetResposeAsync).