我有2个线程,WPF + PIPE。我从WPF登记在管道接收事件。使用ObserveOnDispatcher时()注册的处理程序不叫,取出ObserveOnDispatcher时(),它被称为管螺纹上。使用ObserveOnDispatcher()时,没有人有想法,为什么它不是在所有的叫什么?
ObservableOnDispatcher
取当前线程的调度员的时候,当它被调用。如果你从后台线程调用它,它会寻找该线程调度程序(如果有的话)。
如果要回调到UI线程,你需要从IScheduler
的Scheduler.Dispatcher
而UI线程(比如在应用程序的开始)在该实例传递给你的后台线程。然后,您可以使用ObserveOn(dispatcherSchedulerInstance)
安排回UI线程。
你可以张贴一些代码? :)
总的来说,我会寻找在那里你可能会阻塞UI线程的任何地方,因为WPF调度程序是单线程的,对调度员阻塞操作将导致永远不会被执行你的订阅回调。
除了ObserveOnDispatcher()
使用当前的调度员,而不是“主” UI调度员,我使用ObserveOn()
与特定的,之前捕获调度员的调度,即使碰到了这一点。
这个问题竟然是,使用某些可观测方法,尤其是Buffer()
重载利用时间周期,断开观察到从以前的ObserveOn
上下文并使其从一个单独的“计时器”任务来观察。其结果是,在ObserveOn
必须调用Buffer()
后进行。