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();
}
);
}
我正视未达到来源(onCompleted
和 onNext
)上标记的 (*)
点。
有什么想法吗?
您的 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 - 如果您不这样做,您可能会错过事件?如果这没有帮助,你能提供一个最小的完全工作的重现来证明这个问题吗?
我创建此方法是为了从事件中创建 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
)上标记的 (*)
点。
有什么想法吗?
您的
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 - 如果您不这样做,您可能会错过事件?如果这没有帮助,你能提供一个最小的完全工作的重现来证明这个问题吗?