2012-12-18 2 views
1

백그라운드 스레드의 PRISM에서 이벤트 구독이 있습니다. 로그인 후 여러 개의 응용 프로그램 관련 데이터를로드합니다. 또한 Unity Container에서 MainMenu를 해결하려고합니다.Unity 컨테이너 백그라운드에서 해결 스레드

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

이것은 예외로 종료됩니다. 작업은 GUID와 관련되어 있으므로 STA 스레드에서 호출해야합니다. 나는 Dispatcher를 사용하는 경우이 완전히 이해할 것 같다 하지만

  1. 도 예외 없다하지만 차단 UI 스레드는 내가 원하는 것을하지 이잖아.
  2. 다른 BackgroundWorker 또는 작업 팩토리를 사용하면 문제가 해결되지 않을 수 있습니다. 배경 스레드가 여전히 남아 있기 때문입니다.

그렇다면 백그라운드 스레드에서 GUI 관련 자료를로드하려면 어떻게해야합니까? STA ApartmentState와 쓰레드를 생성

답변

1

시도 :

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

안녕, 당신의 도움을 주셔서 감사합니다. 메뉴를 올바르게로드 중입니다. 하지만 그들은 differend 스레드에 의해 소유되기 때문에 지금은 내 지역에 메뉴를 할당 할 수 없습니다. 어떻게 해결할 수 있을까요? : –

+0

[스레드간에 객체를 이동하는 데 도움이되는지 확인하십시오] (http://stackoverflow.com/questions/2954089/c-sharp-multi-threading-move-ko) 객체 사이-스레드) – Blachshma

+0

흠 여전히 작동하지 않는'Application.Current.Dispatcher.BeginInvoke (새 액션 ((메뉴) => \t \t \t \t \t buttonsRegion.Add (메뉴, "MAINMENU") \t \t \t \t), 새로운 객체 [] {mainMenu}); –

관련 문제