Как переключить ApartmentState из потока, который уже был запущен - PullRequest
2 голосов
/ 29 января 2020

Я использую функцию SSE ServiceStack в WPF в качестве механизма чата. Я зарегистрировал метод OnMessage, и в нем я создаю представление сообщения чата после получения соответствующего сообщения от сервера. Я получаю исключение «Вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого», что сразу заставило меня предположить, что вызывающий поток не был моим основным потоком, и быстрая отладка показала именно это. Похоже, SSE создает свой собственный поток, и этот поток ApartmentState не установлен в STA. Что я могу сделать, чтобы смягчить эту проблему?

Использует ли Application.Current.Dispatcher.Invoke хороший и чистый метод для создания моих представлений в этом случае?

Я также рассмотрел возможность создания нового потока STA каждый раз, когда вызывается мой зарегистрированный метод OnMessage , но это будет означать создание новой темы в каждом сообщении чата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...