2

バックグラウンド スレッドで PRISM からのイベント サブスクリプションがあります。ログイン後、いくつかのアプリケーション関連のデータをロードします。また、Unity Container から MainMenu を解決しようとしています。

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

これは例外的に終了します。操作は GUI 関連であるため、STA スレッドから呼び出す必要があります。これは一見当たり前のようですが、

  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 に答える