2016-10-03 3 views
0

내 MVVM 기반 Wix Managed Bootstrapper 응용 프로그램에서 다른 이벤트를 처리하는 동안 사용자에게보기를 표시하여 일부 입력을 얻으려고합니다. Dispatcher.Invoke()를 사용하기 때문에 Burn 이벤트가 비동기 적으로 실행되고있는 것처럼 보입니다. 이는 Dispatcher.Invoke()를 건너 뛰거나 지나가고 마지막 이벤트를 치는 것입니다. 즉,이 입력 작업이 끝나기를 기다리지 않습니다.WPF : Dispatcher.Invoke()에 대한 호출을 만드는 방법 동기?

이 MessageBox.Show이 튀어 때 우리가 그것을 닫을 때까지 대기하는 참고 : 여기에


은 마지막 타격하기 전에 완료해야하는 이벤트 핸들러이다. 디버깅하는 동안 실제로 MissingSourceView로 전환되고 MissingSourceViewModel이로드 된 것을 볼 수 있지만 건너 뛰는 동안 ApplyComplete()가 실행됩니다. 'GetAwaiter'

오류 CS1061 'BaseViewModel은' 에 대한 정의를 포함하지 않고 :

BootstrapperApplication.ResolveSource += (sender, e) => { 
         System.Windows.Forms.MessageBox.Show("Inside ResolveSource"); 

        WixBootstrapperData.CurrentDispatcher.Invoke(((Action)(() => 
         { 
          WixBootstrapperData.CurrentViewModel = new MissingSourceViewModel(WixBootstrapperData, InfoMessage); 
         }))); 
        }; 


BootstrapperApplication.ApplyComplete += (sender, e) => 
      {    
       WixBootstrapperData.BootstrapperApplicationModel.FinalResult = e.Status; 
       WixBootstrapperData.CurrentDispatcher.Invoke((Action)(() => 
       { 
        InfoMessage = AppResource.MsgFinished; 
        WixBootstrapperData.CurrentViewModel = new FinishViewModel(WixBootstrapperData, InfoMessage); 
       } 
       )); 
      }; 

내가 생각, 내가 기다리고 및 인 ResolveSource()와 비동기,하지만 난 같은 오류에 직면 사용해야합니다 더 확장 메서드 'GetAwaiter'유형 '작업'의 제 인수를 받아들이는 찾을 수 없습니다 (당신은 사용 지시문 또는 어셈블리 참조가 누락?)

ResolveSource()를 끝내고 원하는 곳으로 뛰어 오를 때까지 기다리는 방법을 알려주세요.

+0

당신은 이러한 리셋 이벤트로 수동 동기화 메커니즘을 선택할 수 있습니다 : https://msdn.microsoft.com/en-us/library/system.threading.manualresetevent%28v=vs.110%29.aspx ? f = 255 & MSPPError = -2147217396 – sondergard

답변

0

사용하여 문제가 해결되는지 확인하십시오.

 WixBootstrapperData.CurrentDispatcher.Invoke(((Action)(() => 
     { 
      Task.Factory.StartNew(() => { 
       WixBootstrapperData.CurrentViewModel = new MissingSourceViewModel(WixBootstrapperData, InfoMessage); 
      }).RunSynchronously(); 
     }))); 
+0

예외가있는 경우 : System.InvalidOperationException : RunSynchronously 이미 시작된 작업에 대해 호출 할 수 없습니다. –

+0

CurrentDispatcher가 실행 디스패처하고 인보 업데이트 않음 –

+0

또 다른 동작을 개시한다 : 가 처리되지 않은 'System.InvalidOperationException'형식의 예외가 mscorlib.dll 추가 정보 발생을 : RunSynchronously이되지 않을 수도 이미 시작된 작업을 호출했습니다. – AnjumSKhan

관련 문제