новые данные для наблюдения с каждым вызовом метода - PullRequest
1 голос
/ 23 сентября 2011

это может быть действительно просто для тех, кто владеет ноу-хау, но как я могу напрямую предоставить новые данные для данной наблюдаемой, всякий раз, когда вызывается мой метод?

    IObservable<int> _myObservable; 

    void ThingsCallMe(int someImportantNumber)
    {
        // Current pseudo-code seeking to be replaced with something that would compile?
        _myObservable.Add(someImportantNumber);
    }

    void ISpyOnThings()
    {
        _myObservable.Subscribe(
            i =>
            Console.WriteLine("stole your number " + i.ToString()));
    }

Я также не знаю, какой вид наблюдаемой мне следует использовать, такой, который попадает в OnCompleted () только при особых обстоятельствах?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Вот основной ответ.Я немного изменил ваш код.

Subject<int> _myObservable = new Subject<int>(); 

void ThingsCallMe(int someImportantNumber)
{
    // Current pseudo-code seeking to be replaced with something that would compile?
    _myObservable.OnNext(someImportantNumber);
}

void ISpyOnThings()
{
    _myObservable.Subscribe(
        i =>
        Console.WriteLine("stole your number " + i.ToString()));
}

Это должно работать.Субъект - это просто IObservable и IObserver.Вы можете вызвать OnCompleted, OnError и т. Д.

0 голосов
/ 23 сентября 2011

Я проверил и получил это работает:

static ObservableCollection<int> myCol = new ObservableCollection<int>();

static void Main(string[] args)
{
  ((INotifyCollectionChanged)myCol).CollectionChanged += new NotifyCollectionChangedEventHandler(Program_CollectionChanged);

  ThingsCallMe(4);
  ThingsCallMe(14);
}

static void ThingsCallMe(int someImportantNumber)
{
    myCol.Add(someImportantNumber);
}

static void Program_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    Debug.WriteLine(e.NewItems.ToString());
}
...