ObserveOnDispatcher不工作

问题描述 投票:3回答:3

我有2个线程,WPF + PIPE。我从WPF登记在管道接收事件。使用ObserveOnDispatcher时()注册的处理程序不叫,取出ObserveOnDispatcher时(),它被称为管螺纹上。使用ObserveOnDispatcher()时,没有人有想法,为什么它不是在所有的叫什么?

c# .net wpf system.reactive
3个回答
7
投票

ObservableOnDispatcher取当前线程的调度员的时候,当它被调用。如果你从后台线程调用它,它会寻找该线程调度程序(如果有的话)。

如果要回调到UI线程,你需要从ISchedulerScheduler.Dispatcher而UI线程(比如在应用程序的开始)在该实例传递给你的后台线程。然后,您可以使用ObserveOn(dispatcherSchedulerInstance)安排回UI线程。


0
投票

你可以张贴一些代码? :)

总的来说,我会寻找在那里你可能会阻塞UI线程的任何地方,因为WPF调度程序是单线程的,对调度员阻塞操作将导致永远不会被执行你的订阅回调。


0
投票

除了ObserveOnDispatcher()使用当前的调度员,而不是“主” UI调度员,我使用ObserveOn()与特定的,之前捕获调度员的调度,即使碰到了这一点。

这个问题竟然是,使用某些可观测方法,尤其是Buffer()重载利用时间周期,断开观察到从以前的ObserveOn上下文并使其从一个单独的“计时器”任务来观察。其结果是,在ObserveOn必须调用Buffer()后进行。

© www.soinside.com 2019 - 2024. All rights reserved.