주어진:
public partial class Weather
{
private readonly DispatcherTimer _timer = new DispatcherTimer();
private readonly IWeatherDataProvider _weatherDataProvider;
public Weather(IWeatherDataProvider weatherDataProvider)
{
InitializeComponent();
_weatherDataProvider = weatherDataProvider;
Loaded += async (sender, args) =>
{
_timer.Interval = new TimeSpan(0, 15, 0);
_timer.Tick += async (o, eventArgs) => DataContext = await UpdateWeather();
_timer.Start();
DataContext = await UpdateWeather();
};
Unloaded += (sender, args) => _timer.Stop();
}
private async Task<WeatherData> UpdateWeather()
{
var weatherData = await _weatherDataProvider.GetWeather();
return weatherData;
}
}
Reactive Extensions를 사용하여 변환하는 방법에 대해 의아해합니다. 나는 다음으로 시작했다 :
var weather = Observable.FromAsync(_weatherDataProvider.GetWeather);
그러나 투표 부분에 도달했을 때 :
Observable.Timer(new TimeSpan(0, 15, 0)).Subscribe(weather);
일반적인 과부하가 없습니다. 시퀀스를 생성해야한다는 생각을들은 것 같지만 어떤 이유에서인지 이해할 수 없습니다.
Observable.Interval
으로 Select
투영 핵심이다. 이 같은:
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
너겟 패키지 rx-xaml에 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다