2013-06-26 1 views
1

프리즘의 MefBootstrapper를 사용하여 WPF 응용 프로그램을 초기화했습니다.이 프로세스의 일부로 쉘 창이 초기화됩니다.WPF 응용 프로그램 로그인 창이 없습니다.

MefBootstrapper의 Run() 메소드를 실행 한 후 서버에 연결하는 로그인 윈도우를 표시하고 성공적인 연결의 경우 쉘이 메인 UI 스레드에서로드됩니다.

이 로그인 창은 새로운 전용 UI 스레드에서 실행 중이며,이 프로세스 (서버에 대한 연결, 특히 셸로드)에서 진행률 막대가 고정되지 않도록합니다.

안타깝게도 로그인 창은 상단에 표시되지 않고 초점이 맞지 않습니다 (Activate(), TopMost = true, Focus()).

  //UI mode - a new UI thread is initialized 
      var uiThread = new Thread(() => 
      { 
       var loginWindow = new LoginWindow(); 

       loginWindow.Show(); 
       loginWindow.Activate(); 
       loginWindow.Topmost = true; 
       loginWindow.Topmost = false; 
       loginWindow.Focus();   

       System.Windows.Threading.Dispatcher.Run(); 
      }); 
      uiThread.SetApartmentState(ApartmentState.STA); 
      uiThread.IsBackground = true; 
      uiThread.Start(); 

어떻게이 문제를 해결할 수 있습니까?

+0

창이 이미 초기화 된 후 TopMost 플래그를 설정하고있을 가능성이 높습니다. 귀하의 질문에 관련 코드 부분을 보여주십시오. – NVM

+0

창이 표시되기 전에 TopMost를 true로 설정하면 창에 포커스가 없습니다. –

+0

다음 질문을하지 말아야합니다 : 맨 위 창에 포커스를 설정하는 방법? 당신은 그 문제를 혼란스럽게하고 있습니다. – NVM

답변

0

는 스레드에 LoginWindow의 새로운 인스턴스를 보낼 수

uiThread.IsBackground = false;를 시도?

 uiThread.Start(new LoginWindow()); 

한 다음 Show에 나사 대리인의 loginWindow 파라미터를 사용한다.

윈도우가 현재 발송자 컨텍스트에서 렌더링되고 전경에서 렌더링 될 것 같습니다.

+0

그것을 시도 ... 그것을 변경하지 않습니다. –

+0

내 다음 추측을 참조하십시오. –

0

난 그냥 ConfigureContainer()의 종료 전에 ShellWindow가 생성되기 전에 loginWindow을 만들 것입니다.

그런 식으로 불필요하게보기를 만들지 않아도됩니다. 즉, 지역의보기 모델을 만듭니다.

ShellWindow을 표시하기 전에 (즉 로그인에 성공하면 숨기기) 창을 닫지 않는 것이 중요합니다. 그렇지 않으면 응용 프로그램도 닫힙니다.