簡體   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