我想反复获得属性值并将其分配给另一个属性,但我还没有处理Rx的Observable
创建。我如何创建和订阅一个可观察对象,只是不断读取一个属性(可能是定时器或节流)?
您可以使用静态Interval
操作符在给定的时间范围内重复发出一个值,然后使用Select
操作符将其转换为您希望轮询的对象的属性值。
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;
}
0 r:
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);
我有时用长,但大多数时候,不…
甚至可以使用这个帮助器来检查优先级队列中的scheduler,因此可以用于
听起来您实际上是在要求一个轮询实现,其中一些组件轮询更改的值。可观察对象通常用于响应推送给你的对象(通过事件/可观察对象等),而不是拉取值。也许仅仅在计时器上设置一个后台进程并在计时器的Tick上操作就足够了。可观察到的。Interval的行为与James Hay提到的类似。小心可观察对象。Interval将把你的执行上下文从分派器线程移开。
为什么你要把Rx硬塞进你的轮询实现中?您是否有其他可观察数据源要在这里同步?