在每次方法调用时,向可观察对象添加新数据

本文关键字:新数据 添加 对象 数据 观察 方法 调用 | 更新日期: 2023-09-27 18:09:36

这对于那些有专业知识的人来说可能真的很简单,但是无论何时调用我的方法,i 如何直接向给定的可观察对象提供新数据?

    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() ?

在每次方法调用时,向可观察对象添加新数据

基本答案如下:我稍微修改了一下你的代码。

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等

我测试了一下,并得到了这个工作:

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());
}