我创建了这个方法,以便从事件中创建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
点未到达。
有什么想法吗?
答案 0 :(得分:2)
您的OnError
处理程序实际上是OnCompleted
处理程序。 () => ...
lambdas不参与辩论,使用_ => ...
代替OnCompleted
来达到正确的超载 - 但这无论如何都不会有帮助,因为:
即使经过纠正,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 - 如果您不想错过这些事件?如果这没有帮助,您是否可以提供最小化的完整工作重现来证明这个问题?