2017-01-11 9 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イベントには「完了」と同等の表現がないという事実は変わりませんが、正確に1つのイベントを探していることがわかっている場合は、観測可能なチェーンのリソースをクリーンアップするのに役立ちます。 –

関連する問題