我正在使用ReactiveUI' RegisterScheduler
这样:
MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract);
我希望一些消息订阅者(注册此消息)在UI线程中处理它,但同时,其他一些订阅者在backgroud线程中处理它。
以下是用例:一些消息的订阅者将处理必须在UI线程中发生的UI相关数据。但是我希望尽可能减少UI线程的使用,所以我希望在后台线程中进行其他操作(与UI无关)。 ReactiveUI是否可能?
我目前的解决方案是使用2个不同的合同字符串,实际上可以考虑2个不同的消息。它可以工作,但两个消息应该一起发送,这让我感到很无聊。
有什么想法吗?
费
答案 0 :(得分:1)
也许忽略调度程序,或者设置可能适当地设置默认值(默认值为CurrentThreadScheduler
)并且只需使用ObserveOn
来定义在需要时将执行处理程序的调度程序。
处理UI线程:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.MainThreadScheduler)
.Subscribe(message => { /* ... */ });
处理线程池线程:
MessageBus.Current.Listen<string>()
.ObserveOn(RxApp.TaskpoolScheduler)
.Subscribe(message => { /* ... */ });