使用RX.NET反向TakeUntil逻辑



首先,充分披露我是RX的新手,但我现在每天都在学习…

我需要构建一个可观察对象,它将启用一个按钮(或自动启动一个动作),只要另一个传入的可观察平均信号流在一定范围内进入。到目前为止,我已经了解到,我可以通过添加一个。where到一个平均观察对象,然后我可以检查我观察到的平均值从事件处理程序创建实际上是在给定的范围内…

然而,我还需要的是让这些可观察的值影响我的动作/按钮的状态(允许它被执行),直到它的底层/内部信号超过给定的范围。这样的事情在RX可能作为一个反向。takeuntil(逆where子句),我现在认为可能解决我的问题,或者我应该只是重用原来的可观察对象,并复制它与一个否定的。where子句,然后使用它作为另一个独立的可观察对象…如果是后者,是否有一些性能损失通过重用几乎相同的可观察对象多次,只是改变他们的linq查询…请问多少个可观察对象才算太多?

我觉得这样就足够了。

var source = Observable.Range(0, 10);
var query =
    source
        .Buffer(4, 1)
        .Select(xs => xs.Average())
        .Select(x => x > 5.0 && x <= 7.0);
query.ObservableOn(button).Subscribe(enabled => button.Enabled = enabled);

(我假设是Windows窗体)

这给了我:

False
False
False
False
True
True
False
False
False
False

我可以稍微改进一下:

var query =
    source
        .Buffer(4, 1)
        .Select(xs => xs.Average())
        .Select(x => x > 5.0 && x <= 7.0)
        .StartWith(true)
        .DistinctUntilChanged();

这就给了我:

True
False
True
False

如果我错过了什么请告诉我。

相关内容

  • 没有找到相关文章

最新更新