0

以下のコードがあります。

this.ObservableForProperty(x => x.SelectedDay)
    .Throttle(TimeSpan.FromMilliseconds(3600))
    .Where(x => SelectedDay != null)
    .ObserveOn(CoreWindow.GetForCurrentThread().Dispatcher)
    .Subscribe(x => SomeRandomMethod());

Throttle はうまく機能しており、x.SelectedDay の変更が停止するまで SomeRandomMethod は呼び出されません。ただし、変更されるたびに呼び出しています。

So i do this:  
Change,  
Change,  
Wait  
//SomeRandomMethod called 2 times at end of throttle  
Change  
Wait  
//SomeRandomMethod called 3 times
Change  
Change  
Change 
Wait  
//SomeRandomMethod called 6 times.

以前のすべての変更イベントを無視し、スロットルが完了した時点で最新のもののみを取得するにはどうすればよいですか。

So i would like this:
Change   
Change 
Wait  
//SomeRandomMethod called once
Change  
Wait  
//SomeRandomMethod called once
Change  
Change  
Change 
Wait  
//SomeRandomMethod called once
4

1 に答える 1

1

このメソッドをどこで呼び出していますか? コンストラクターでのみ呼び出す必要があり、一度だけ呼び出す必要があります。また、上記のコードのより良いバージョンは次のとおりです。

this.ObservableForProperty(x => x.SelectedDay)
    .Throttle(TimeSpan.FromMilliseconds(3600), RxApp.DeferredScheduler)
    .Where(x => SelectedDay != null)
    .Subscribe(x => SomeRandomMethod());
于 2013-03-11T16:28:53.827 に答える