这对于那些有专业知识的人来说可能真的很简单,但是无论何时调用我的方法,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());
}