Xamarin Reactive Observable Throttling не работает - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу регулировать датчик ориентации Xamarin.Essential следующим образом:

Observable.FromEventPattern<OrientationSensorChangedEventArgs>(
    ev => OrientationSensor.ReadingChanged += ev,
    ev => OrientationSensor.ReadingChanged -= ev
)
.Throttle(TimeSpan.FromMilliseconds(500))
.Subscribe(x => { onOrientationChanged(x.Sender, x.EventArgs); });

OrientationSensor.Start(SensorSpeed.UI);

Метод обработчика имеет следующую подпись:

void onOrientationChanged(object sender, OrientationSensorChangedEventArgs e)
{
}

Если я опускаю Throttle метод, все отлично работает.С Throttle там ничего не срабатывает.

1 Ответ

0 голосов
/ 06 февраля 2019

Как я понимаю, вы хотите повернуть экран, но не сразу - только через 500 мс.В таком случае вы должны использовать .Debounce(TimeSpan.FromMilliseconds(500)) вместо .Throttle в строке 4.

Разница между Throttle и Debounce такова:

  • Debounce будет принимать всевходящие события в течение 500 мс и будут излучать только последние.

  • Дроссель работает немного иначе: он берет первое событие в течение 500 мс и генерирует его;все остальные события игнорируются до истечения периода 500 мс.Из-за этого вы получаете только небольшое изменение в качестве первого события, которого недостаточно для завершения вращения.

...