【问题标题】:Xamarin Reactive Observable Throttling doesn't workXamarin Reactive Observable Throttling 不起作用
【发布时间】:2019-02-06 11:48:27
【问题描述】:

我想对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,根本没有任何反应。

【问题讨论】:

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


    【解决方案1】:

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

    Throttle 和 Debounce 的区别是这样的:

    • Debounce 将在 500 毫秒期间处理所有传入事件,并且 只会发出最后一个。

    • 油门的工作方式略有不同:它在 500ms 周期并发射;所有其他事件都被忽略,直到 500ms 周期过去了。因此,您只会收到一点零钱 作为第一个事件,这不足以完成轮换。

    【讨论】:

    • 背后的目的不是屏幕旋转。我实际上确实想在一段时间内忽略事件。无论如何,我的实现/库似乎没有 Debounce 方法。我认为我的问题是用法/语法,仅仅是因为根本没有触发。
    • 好的,我发现这是时机本身。 500ms 似乎太长了。如果我降低到 50 毫秒,它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 2021-07-23
    • 2018-05-11
    相关资源
    最近更新 更多