[英]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.