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