2017-01-11 2 views
2

이벤트에서 Observable을 생성하기 위해이 메서드를 만들었습니다.onCompleted 및 onNext에 도달하지 않았습니다.

private void BuildObservables(WebClient webClient) 
{ 
    Observable.FromEventPattern<AsyncCompletedEventHandler, AsyncCompletedEventArgs>(h => webClient.DownloadFileCompleted += h, h => webClient.DownloadFileCompleted -= h) 
     .Select(ep => ep.EventArgs) 
     .Subscribe(
      _ => 
      { 
       //stuff code 
      }, 
      _ => this.WizardViewModel.PageCompleted() <<<<< (*) NOT REACHED 
     ); 

    Observable.FromEventPattern<DownloadProgressChangedEventHandler, DownloadProgressChangedEventArgs>(h => webClient.DownloadProgressChanged += h, h => webClient.DownloadProgressChanged -= h) 
     .Select(ep => ep.EventArgs) 
     .Subscribe(
      a => 
      { 
       <<<<< (*) NOT REACHED 
       this.progressEdit.Position = a.ProgressPercentage; 
       progressEdit.Update(); 
      } 
     ); 
} 

나는 소스 (onCompletedonNext)에 표시 (*) 포인트에 도달되지 않도록 위를 향하도록 해요 : 나는 진행률 표시 줄을 파일을 다운로드하고 업데이트 할 것을 시도하고있다.

아이디어가 있으십니까?

답변

2
  • 귀하의 OnCompleted 핸들러는 실제로 OnError 핸들러입니다. OnCompleted 람다는, 인수를 취할 올바른 오버로드를 공격하는 대신 _ => ...() => ...를 사용하지 않는 -하지만 때문에 어쨌든 도움이되지 않습니다 :

  • 은 한 번도 수정의 OnCompleted가 발생하지 않습니다. FromEventHandler은 .NET 이벤트를 OnCompleted으로 매핑하지 않습니다. 의미있는 변환이 없습니다. 이 문제의 원인을 완전히 이해하려면 내 대답 How to use Observable.FromEvent instead of FromEventPattern and avoid string literal event names을 참조하십시오. 귀하의 경우에는 OnNext 처리기가 원하는 것입니다.

  • 간단한 테스트 응용 프로그램에서 "www.google.com"이벤트가 발생하면 앱이 종료되기 전에 이벤트가 시작될 시간을 허용합니까? DownloadXXXAsync를 호출하기 전에 BuildObservables를 호출하고 있습니까? 그렇지 않으면 이벤트가 누락 될 수 있습니다. 이 방법이 도움이되지 않는다면 문제를 보여주는 최소한의 완전 재 검증을 제공 할 수 있습니까?

+1

'.Take (1)'은 'OnCompleted'를 발생시킵니다. – Enigmativity

+0

사실입니다. 기본 .NET 이벤트에 "완료 중"과 동일한 표현이 없다는 사실은 변하지 않지만 정확히 하나의 이벤트를 찾고 있음을 알게되면 관찰 가능한 체인에서 리소스를 정리하는 데 유용 할 수 있습니다. –