onCompleted 和 onNext 未达到

onCompleted and onNext not reached

我创建此方法是为了从事件中创建 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();
            }
        );
}

我正视未达到来源(onCompletedonNext)上标记的 (*) 点。

有什么想法吗?

  • 您的 OnCompleted 处理程序实际上是一个 OnError 处理程序。 OnCompleted lambda 不带参数,使用 () => ... 而不是 _ => ... 来达到正确的重载 - 但这无论如何都无济于事,因为:

  • 即使更正,OnCompleted 也不会触发。 FromEventHandler 不会将 .NET 事件映射到 OnCompleted - 没有有意义的转换。要完全理解这是为什么,请参阅我在 How to use Observable.FromEvent instead of FromEventPattern and avoid string literal event names 中的回答。在您的情况下,OnNext 处理程序无论如何都是您想要的。

  • OnNext 事件肯定会在我下载一个简单的测试应用程序时触发 "www.google.com" 你是否允许事件在应用程序终止之前触发?您是否在调用 DownloadXXXAsync 之前调用 BuildObservables - 如果您不这样做,您可能会错过事件?如果这没有帮助,你能提供一个最小的完全工作的重现来证明这个问题吗?