2

我在后台线程中有一个来自 PRISM 的事件订阅。登录后,我加载了几个与应用程序相关的数据。我也尝试从 Unity Container 中解析 MainMenu。

MainMenu mainMenu = container.Resolve<MainMenu>();

这将以异常结束。必须从 STA 线程调用它,因为这些操作与 GUI 相关。这似乎完全可以理解,但是

  1. 如果我使用 Dispatcher 没有异常,但它会阻塞 UI 线程,那不是我想要的。
  2. 使用另一个 BackgroundWorker 或 Task Factory 不会解决问题,因为它仍在后台线程中。

那么如何在后台线程中加载与 GUI 相关的内容呢?

4

1 回答 1

1

尝试使用STAApartmentState 创建一个线程:

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();
于 2012-12-18T13:57:26.123 回答