繁体   English   中英

创建一个反复调用方法的observable

[英]Create an observable that repeatedly calls a method

我想反复获取一个属性值并将其分配给另一个属性,但我还没有处理Rx的Observable创建。 如何创建和订阅只是不断读取属性的可观察对象(可能是定时器或限制)?

您可以使用静态Interval运算符在给定时间范围内重复发出值,然后使用Select opertor将其转换为要轮询的对象的属性值。

var objectIWantToPoll = new MyObject(); 
var objectIWantToSetPropertyOn = new MyObject();


var polledValues =  Observable.Interval(TimeSpan.FromSeconds(1)) 
   .Select(_ => objectIWantToPoll.SomeProperty);

polledValues.Subscribe(propertyValue => 
   objectIWantToSetPropertyOn.SomeProperty = propertyValue));
public static IObservable<long> CreateObservableTimerWithAction(this Action actionT, int timeSpan, Control control)
    {
        var obs = Observable.Create<long>(
             observer =>
             {
                 Observable.Interval(TimeSpan.FromMilliseconds(timeSpan))
.DistinctUntilChanged(fg =>control.Text ).Subscribe(l => actionT());
                 return Disposable.Empty;
             });

        return obs;
    }

0r:

public static IObservable<long> CreateObservableTimer<T>(this Action actionT,int timeSpan)
    {
       var obs= Observable.Create<long>(
            observer =>
            { 
                Observable.Interval(TimeSpan.FromMilliseconds(timeSpan))
.DistinctUntilChanged().Subscribe(l => actionT());
                return Disposable.Empty;
            });
        return obs;
    }

我经常使用这个,有时间方法去特定时间,直到我处理它们(obs.Dispose())..

CreateObservableTimer(()=> CheckForDequeues(1),500);

我实际上有时使用很长时间,但大多数时候,不...

甚至使用此帮助程序检查优先级队列中的调度程序,因此可以使用

听起来你本质上要求一个轮询实现,其中一些组件轮询更改的值。 Observable通常用于对推送给您的对象(通过事件/可观察对象等)做出反应,而不是提取值。 也许只是在计时器上设置后台进程并对该计时器的Tick进行操作就足够了。 Observable.Interval的行为与James Hay提到的相似。 请注意,Observable.Interval会将执行上下文从调度程序线程中移除。

你为什么试图将Rx塞进你的投票实施? 您是否在此处尝试同步其他可观察数据源?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM