单击列表框时如何生成新的Rx事件

时间:2013-08-09 22:17:11

标签: c# system.reactive

我有一个简单的WPF应用程序,其中包含一个链接列表。我想选择其中一些,将它们添加到一个“可观察列表”并订阅它。然后观察者回调将下载链接,如果有任何睡眠,将继续下一个链接。 我还可以更新我的UI,让用户知道某个项目已经进行。

有人可以帮我这么做吗

非常感谢。

1 个答案:

答案 0 :(得分:2)

我会使用Observable.FromEventPattern首先将链接选择事件的列表框转换为Obriable of Uri。

接下来,我会写一个扩展方法来下载链接。

public static IObservable<bool> DownloadLink(this IObservable<Uri> source)
{
    return Observable.Create<bool>(observer =>
    {
        return source
            .Subscribe(onNext: async link =>
            {
                using (var client = new System.Net.Http.HttpClient())
                {
                    var result = await client.GetStringAsync(link);

                    if (isSuccess)
                        observer.OnNext(true);
                    else
                        observer.OnNext(false);
                }
            }, onError: observer.OnError, onCompleted: observer.OnCompleted);
    });
}

最后,把它搞定。

uriObservable.DownloadLink().ObserveOnDispatcher().Subscribe( // update ui logic here );