Xamarin反应式可观察节流不起作用

时间:2019-02-06 11:48:27

标签: c# xamarin.forms observable reactive xamarin.essentials

我要按如下方式限制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 :(得分:0)

据我了解,您想旋转屏幕,但不是立即旋转-仅在经过500毫秒之后。 在这种情况下,您应该在第4行上使用.Debounce(TimeSpan.FromMilliseconds(500))而不是.Throttle

油门和去抖之间的区别是:

  • Debounce将在500ms的时间内处理所有传入事件,并且 只会发出最后一个。

  • 节气门的工作原理有所不同:它需要在 500ms周期并发射它;所有其他事件将被忽略,直到 500ms周期过去。因此,您只得到一小笔零钱 作为第一个事件,还不足以完成轮换。