2012-12-18 38 views
1

我在後臺線程中有PRISM的事件訂閱。登錄後我加載了幾個應用程序相關的數據 另外我嘗試從Unity Container解析MainMenu。統一容器在後臺線程中解決線程

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

這將異常結束。它必須從STA線程調用,因爲這些操作與GUID相關。 這似乎完全可以理解的,但

  1. 如果我使用的調度員也沒有例外,但它會阻止UI線程,那不是我想要的。
  2. 使用另一個BackgroundWorker或任務工廠不會解決問題,因爲它仍然在後臺線程。

那麼如何在後臺線程中加載GUI相關的東西呢?

回答

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(); 
+0

您好,感謝您的幫助。它正在正確加載菜單。但是現在我不能將菜單分配給我的區域,因爲它們屬於不同的線程。如何解決這個問題? :) 'buttonsRegion.Add(mainMenu,「MainMenu」);' –

+0

看看這是否有幫助[線程之間移動對象](http://stackoverflow.com/questions/2954089/c-sharp-multi-threading-move-對象之間線程) – Blachshma

+0

嗯仍無法正常工作'Application.Current.Dispatcher.BeginInvoke(新行動((菜單)=> \t \t \t \t \t buttonsRegion.Add(菜單 「的MainMenu」) \t \t \t \t ),新對象[] {m​​ainMenu});' –