Я внедрил решение из вопроса переполнения стека Implement progressbar in this simple WPF application.WPF и фоновый рабочий и вызывающая нить должны быть STA
MainWindow имеет свою собственную модель. Внутри этой модели просмотра я получаю вход пользователя и потребляю службу WCF с помощью рабочего фона. После того, как WCF вернет данные, я попытаюсь отобразить их в новом окне. В этом случае возникает ошибка:
Вызывающая нить должна быть STA, потому что многие компоненты пользовательского интерфейса требуют .
Я пытался поставить атрибут [STAThread]
на MainWindow code-behind, а также внутри застройщик MainWindowViewModel. В обоих случаях ничего не изменилось.
Что мне не хватает?
Update После нажатия пользователя команды в ViewModel вызова метода LoadData
private void LoadData(string searchBy)
{
IsBusy = true;
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (o, ea) =>
{
switch (searchBy)
{
// WCF call to load data
}
}
worker.RunWorkerCompleted += (o, ea) =>
{
IsBusy = false;
};
worker.RunWorkerAsync();
Где вы строите? BackgroundWorker? – Douglas
«вызывающий поток» в сообщении не является вашим потоком пользовательского интерфейса. Это поток обратного вызова WCF. Вам необходимо мобилизовать вызов из этого фонового потока в поток пользовательского интерфейса с помощью Dispatcher, SynchronizationContext и т. Д. –
@Douglas Я создаю BackgroundWorker после нажатия кнопки для загрузки данных с помощью вызова wcf. – user1765862