Convert Polling Web Service to RX

空扰寡人 提交于 2019-12-06 12:24:30
James World

Observable.Interval with a Select projection is the key. Something like this:

public class Weather
{
    private readonly IWeatherDataProvider _weatherDataProvider;        
    private CompositeDisposable disposables = new CompositeDisposable();

    public Weather(IWeatherDataProvider weatherDataProvider)
    {
        InitializeComponent();
        _weatherDataProvider = weatherDataProvider;

        Loaded += (sender, args) =>
        {
          var weather = Observable.Interval(TimeSpan.FromMinutes(15))
              .SelectMany(_ => weatherDataProvider.GetWeather().ToObservable())
              .ObserveOnDispatcher()
              .Subscribe(data => DataContext = data);
          disposables.Add(weather);
        };

        Unloaded += (sender, args) => disposables.Dispose();
    }
}

ObserveOnDispatcher is in nuget package rx-xaml.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!