У меня есть подписка на мероприятие от PRISM в фоновой теме. После входа в систему я загружаю несколько данных, связанных с приложением. Также я пытаюсь разрешить MainMenu из контейнера Unity.
MainMenu mainMenu = container.Resolve<MainMenu>();
Это закончится исключением. Он должен вызываться из потока STA, поскольку операции связаны с графическим интерфейсом пользователя. Это кажется совершенно понятным, но
- Если я использую Диспетчер, исключения нет, но он блокирует поток пользовательского интерфейса, это не то, что я хочу.
- Использование другого BackgroundWorker или Task Factory не решит проблему, потому что он все еще находится в фоновом режиме Thread.
Итак, как мне загрузить материалы, связанные с графическим интерфейсом пользователя, в фоновый поток?
2
Johannes Wanzek
18 Дек 2012 в 17:39
1 ответ
Лучший ответ
Попробуйте создать поток с помощью STA
ApartmentState:
Thread uiThread = new Thread(() =>
{
mainMenu = container.Resolve<MainMenu>();
// Allow the main UI thread to proceed
System.Windows.Threading.Dispatcher.Run();
});
uiThread.SetApartmentState(ApartmentState.STA);
uiThread.IsBackground = true;
uiThread.Start();
1
Blachshma
18 Дек 2012 в 17:57
Похожие вопросы
Связанные вопросы
Новые вопросы
wpf
Windows Presentation Foundation, или WPF, является подсистемой для визуализации пользовательских интерфейсов в приложениях на основе Windows.
buttonsRegion.Add(mainMenu, "MainMenu");
Application.Current.Dispatcher.BeginInvoke(new Action<MainMenu>((menu) => buttonsRegion.Add(menu, "MainMenu") ), new object[] { mainMenu });