1

我想节流方向传感器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那里,没有任何东西会着火。

4

1 回答 1

2

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

Throttle 和 Debounce 的区别如下:

  • Debounce 将在 500 毫秒期间接收所有传入事件,并且仅发出最后一个事件。

  • Throttle 的工作方式略有不同:它在 500 毫秒期间接收第一个事件并发出它;在 500ms 周期过去之前,所有其他事件都将被忽略。因此,作为第一个事件,您只会收到很小的更改,这不足以完成轮换。

于 2019-02-06T12:09:15.317 回答