Я немного озадачен, потому что мне трудно найти какую-либо подходящую информацию для моего вопроса.Я очень плохо знаком с System.Reactive, поэтому, возможно, я его неправильно использую.
У меня есть ряд объектов, которые все вызывают статический метод во время события.Я хочу ограничить вызовы этим методом.
public class MyObject
{
public MyObject ()
{
var observable = Observable.FromEventPattern<SizeChangedEventHandler, SizeChangedEventArgs>
(handler => SizeChanged += handler, handler => SizeChanged -= handler);
observable.Throttle (TimeSpan.FromMilliseconds (100));
observable.Subscribe (x =>
{
MethodToCall (this);
});
}
static void MethodToCall (MyObject obj)
{
// Do something.
}
}
Теперь это, очевидно, не работает, потому что он только ограничивает вызовы от этого единственного объекта, которые происходят намного реже, чем 100 мс.То, что мне нужно, - это какая-то статическая наблюдаемая, которая накапливает все вызовы, а затем отправляет вызов через 100 мс.Кто-нибудь может дать мне несколько советов?
Обновление: я реализовал его с помощью секундомера, который также, кажется, делает эту работу.Мне все еще интересно узнать о реактивном решении.
private static Stopwatch sw = new Stopwatch();
private static void MethodToCall(MyObjectv)
{
if (sw.ElapsedMilliseconds < 100 && sw.IsRunning)
{
return;
}
// Some code here
if (sw.IsRunning)
{
sw.Restart();
}
else
{
sw.Start();
}
}