是否有可能某些消息总线订阅者在 UI 线程中处理消息,而另一些订阅者在后台线程中处理消息?
Is it possible for some messagebus subscriblers to handle message in UI thread, some others in background thread?
我正在像这样使用 ReactiveUI 的 RegisterScheduler
:
MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract);
我希望一些消息订阅者(注册此消息的人)在 UI 线程中处理它,但同时,一些其他订阅者在后台线程中处理它。
这是用例:某些消息的订阅者将处理 UI 相关数据,这些数据必须在 UI 线程中发生。但我想尽可能减少 UI 线程的使用,所以我希望在后台线程中进行其他操作(与 UI 无关)。 ReactiveUI 是否可行?
我目前的解决方案是使用2个不同的合同字符串,实际上可以认为是2个不同的消息。可以用,但是两个消息应该一起发出,这让我觉得很无聊。
有什么想法吗?
飞
也许忽略调度程序,或者适当地设置您的默认值(默认值是 CurrentThreadScheduler
),然后只使用 ObserveOn
来定义处理程序将在需要时执行的调度程序。
要在 UI 线程上处理:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(message => { /* ... */ });
在线程池线程上处理:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.TaskpoolScheduler)
.Subscribe(message => { /* ... */ });
我正在像这样使用 ReactiveUI 的 RegisterScheduler
:
MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract);
我希望一些消息订阅者(注册此消息的人)在 UI 线程中处理它,但同时,一些其他订阅者在后台线程中处理它。
这是用例:某些消息的订阅者将处理 UI 相关数据,这些数据必须在 UI 线程中发生。但我想尽可能减少 UI 线程的使用,所以我希望在后台线程中进行其他操作(与 UI 无关)。 ReactiveUI 是否可行?
我目前的解决方案是使用2个不同的合同字符串,实际上可以认为是2个不同的消息。可以用,但是两个消息应该一起发出,这让我觉得很无聊。
有什么想法吗?
飞
也许忽略调度程序,或者适当地设置您的默认值(默认值是 CurrentThreadScheduler
),然后只使用 ObserveOn
来定义处理程序将在需要时执行的调度程序。
要在 UI 线程上处理:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(message => { /* ... */ });
在线程池线程上处理:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.TaskpoolScheduler)
.Subscribe(message => { /* ... */ });