【发布时间】:2017-01-20 18:18:22
【问题描述】:
我正在创建一个 observable,并且我正在单独创建订阅:
class CustomQuery {
string Name;
IObservable<int> Occurrences;
}
public IEnumerable<CustomQuery> GatherCustomQueryObservables()
{
yield return new CustomQuery() {
Name = "NameXXX",
Occurrences = Observable.Create<int>(
observer =>
{
int occurrences = this.webservice.GetOccurrences()
observer.OnNext(occurrences);
return System.Reactive.Disposables.Disposable.Empty;
}
);
}
另一方面,还有另一种方法处理这些CustomQueries:
public void CommitCustomQueryObservables(IEnumerable<CustomQuery> queries)
{
foreach (CustomQuery query in queries)
{
query.Occurrences
.Select(o => o)
.SubscribeOn(System.Reactive.Concurrency.TaskPoolScheduler.Default)
.ObserveOn(System.Reactive.Concurrency.DispatcherScheduler.Current)
.Subscribe(
occurrences =>
{
string strOccurrences = occurrences > 0 ? occurrences.ToString() : "";
this.Label.Text = strOccurrences;
}
);
}
}
不过,我收到了 System.InvalidOperationException 异常:
当前线程没有与之关联的 Dispatcher。
stacktrace 的最后一行在
System.Reactive.Concurrency.DispatcherScheduler.get_Current().
我不太清楚如何处理它。
有什么想法吗?
【问题讨论】:
-
您是在控制台或 WinForms 应用程序中运行此代码吗? DispatcherScheduler 只能用于 WPF 应用程序。此外,如果您打算对此代码进行单元测试,通常最好注入您打算使用的调度程序,而不是使用上面显示的静态调度程序。
-
是的,我在 WinForms 应用程序中运行此代码。没有办法达到这个目标吗?我刚刚安装了
System.Reactive.Winforms.Formsnuget 参考,但是,它让我遇到了同样的异常。
标签: system.reactive