【发布时间】:2016-06-13 12:55:39
【问题描述】:
我有一个响应式 UI/rx 应用程序。目前,我正在开发它的桌面部分,所以它是一个 wpf 应用程序。由于性能原因,我想在其单独的线程中创建每个窗口。
这就是为什么我需要在当前线程上运行 ObserveOn
someCollection.Changed.Buffer(TimeSpan.FromSeconds(n)).ObserveOn(*should be a link to a current thread*).Subscribe(bufferedItems => {})
此外,此代码位于可移植库中,这就是为什么我不能使用 System.Threading.Thread 类
有什么解决办法吗?
【问题讨论】:
-
什么是“当前线程”?它是 UI 线程还是任何随机线程?如果它是 UI/主线程,您可以使用
SynchronizationContext.Current 作为您的ObserveOn的参数,但如果它是任何随机线程,您可能必须编写自己的调度程序(或者至少我不知道这样做的人之一)。 -
我在一个新线程中创建了一个窗口,这样窗口对象就会有一个单独的调度程序(根据这个eprystupa.wordpress.com/2008/07/28/…)。 SynchronizationContext.Current 不起作用,因为如果不是从 ui 线程调用它,它将始终返回 null。我已经尝试过编写自己的调度程序,但工作是创建一个新线程,而不是重用现有线程
标签: c# wpf multithreading system.reactive reactiveui