2016-07-04 2 views
0

は、私はこのようなReactiveUIのRegisterSchedulerを使用していますバックグラウンドスレッド。一部のメッセージバス加入者は、UIスレッドでメッセージを処理することは可能ですか? <p></p> <p><code>MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract); </code></p>は、私は(このメッセージを登録する)UIスレッドでそれを処理メッセージ加入者のいくつかをしたいが、同時に、いくつかの他の加入者は、それを扱う:

ユースケースです:メッセージのサブスクライバの中には、UIスレッドで発生する必要があるUI関連のデータを処理するものがあります。しかし、私は可能な限り最小限のUIスレッドの使用を減らしたいので、バックグラウンドスレッドで他の操作(UIに関係ない)を実行したいと思います。 ReactiveUIは可能ですか?

私の現在の解決策は2つの異なる契約文字列を使用することです。実際には2つの異なるメッセージとみなすことができます。それは動作しますが、両方のメッセージを一緒に送信する必要があります。

アイデア?

答えて

1

はおそらく、スケジューラを無視するか、あるいは適切なデフォルトを設定する(デフォルトはCurrentThreadSchedulerある)とちょうどあなたがする必要があるときにハンドラがで実行されるスケジューラを定義するためにObserveOnを使用して設定します。スレッドプールのスレッドで処理するに

MessageBus.Current.Listen<string>() 
    .ObserveOn(RxApp.MainThreadScheduler) 
    .Subscribe(message => { /* ... */ }); 

:UIスレッドで処理するには

MessageBus.Current.Listen<string>() 
    .ObserveOn(RxApp.TaskpoolScheduler) 
    .Subscribe(message => { /* ... */ }); 
+0

私が欲しい、まさに。 – Felix

関連する問題

 関連する問題