2011-10-16 2 views
4

스로틀 링이 매우 높은 빈도로 실행되는 키보드 트리거 이벤트를 길들이려하고 있습니다. 아래 코드는 작동하지만 제한 시간 간격으로 GlobalCopy의 첫 번째 호출을 지연합니다. 지연없이 첫 번째 샘플을 얻을 수있는 방법이 있습니까?스로틀도 첫 번째 샘플을 지연합니다.

observableGlobalCopy = Observable 
    .FromEventPattern<EventHandler, EventArgs>(h => this.GlobalCopy += h, h => this.GlobalCopy -= h); 

observableGlobalCopy 
    .SubscribeOnDispatcher() 
    .Throttle(GlobalEventThottle) 
    .Subscribe(x => GlobalCopyHandler()); 

답변

5

당신이 뭔가를 시도 할 수 :

var observableGlobalCopy2 = observableGlobalCopy 
    .Window(() => Observable.Timer(TimeSpan.FromSeconds(1.0))) 
    .Select(_ => _.Take(1)) 
    .Merge(); 
+1

'선택'과 '병합'을 하나의 '선택 사항'으로 결합하여 단축 할 수도 있습니다. – Ziriax

0

내가 제대로 귀하의 요구 사항을 이해한다면, 이건 어때요?

observableGlobalCopy.Take(1) 
    .Concat(
     observableGlobalCopy.Throttle(GlobalEventThottle)) 
    .SubscribeOnDispatcher() 
    .Subscribe(x => GlobalCopyHandler());