onCompleted和onNext未达到

时间:2017-01-11 11:19:51

标签: .net system.reactive

我创建了这个方法,以便从事件中创建Observable。我正在尝试下载文件,并更新进度条:

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();
            }
        );
}

我正面临着源(*)onCompleted上标记的onNext点未到达。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

  • 您的OnError处理程序实际上是OnCompleted处理程序。 () => ... lambdas不参与辩论,使用_ => ...代替OnCompleted来达到正确的超载 - 但这无论如何都不会有帮助,因为:

    < / LI>
  • 即使经过纠正,FromEventHandler也不会被解雇。 OnCompleted未将.NET事件映射到OnNext - 没有有意义的转换。要完整了解其原因,请参阅How to use Observable.FromEvent instead of FromEventPattern and avoid string literal event names中的答案。在您的情况下,OnNext处理程序无论如何都是您想要的。

  • {{1}}活动在一个简单的测试应用程序下载&#34; www.google.com&#34;在应用程序终止之前,您是否允许时间触发事件?您在调用DownloadXXXAsync之前是否正在调用BuildObservables - 如果您不想错过这些事件?如果这没有帮助,您是否可以提供最小化的完整工作重现来证明这个问题?