ObserveOnDispatcher not working

本文关键字:working not ObserveOnDispatcher | 更新日期: 2023-09-27 17:57:03

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

ObserveOnDispatcher not working

DispatcherObservable.ObserveOnDispatcher

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

如果要回调 UI 线程,则需要在 UI 线程上(如在应用程序开始时)从Scheduler.Dispatcher获取IScheduler,并将该实例传递给后台线程。然后,可以使用ObserveOn(dispatcherSchedulerInstance)计划回 UI 线程。

你能发布一些代码吗? :)

通常,我会寻找可能阻止 ui 线程的任何地方,因为 wpf 调度程序是单线程的,调度程序上的阻止操作将导致您的订阅回调永远不会执行。

除了ObserveOnDispatcher()使用当前调度程序而不是"主"UI 调度程序之外,即使将ObserveOn()与先前捕获的特定调度程序调度程序一起使用,我也遇到了这个问题。

事实证明,问题在于使用一些可观察的方法,特别是具有时间段的Buffer()重载,会使可观察量与其先前的ObserveOn上下文断开连接,并导致从单独的"计时器"任务中观察到它。 因此,必须在调用Buffer()后完成ObserveOn