ObserveOnDispatcher无法正常工作

时间:2011-05-18 10:51:03

标签: c# .net wpf system.reactive

我有2个线程,WPF + PIPE。我在管道rx事件上注册了WPF。 当使用ObserveOnDispatcher()时,不会调用已注册的处理程序,当删除ObserveOnDispatcher()时,它会在管道线程上调用。 有没有人知道为什么在使用ObserveOnDispatcher()时根本没有调用它?

3 个答案:

答案 0 :(得分:7)

ObservableOnDispatcher在调用时获取当前线程的调度程序。如果你从后台线程调用它,它将在该线程上寻找一个调度程序(如果它有一个)。

如果你想回调UI线程,你需要在UI线程上从IScheduler 获取Scheduler.Dispatcher(就像在开始时一样)应用程序)并将该实例传递给您的后台线程。然后,您可以使用ObserveOn(dispatcherSchedulerInstance)安排回UI线程。

答案 1 :(得分:0)

你能发一些代码吗? :)

一般情况下,我会寻找你可能阻塞ui线程的任何地方,因为wpf调度程序是单线程的,对调度程序的阻塞操作将导致你的订阅回调永远不会被执行。

答案 2 :(得分:0)

除了ObserveOnDispatcher()使用当前调度程序而不是“主” UI调度程序之外,即使将ObserveOn()与特定的先前捕获的调度程序调度程序配合使用,我也遇到了这种情况。

原来的问题是,使用某些可观察的方法,特别是Buffer()重载(带有时间段),将可观察的对象与其先前的ObserveOn上下文断开连接,并导致从单独的观察对象进行观察“计时器”任务。因此,ObserveOn必须在调用Buffer()之后完成。