2016-07-04 7 views
0

Ich verwende ReactiveUI des RegisterScheduler wie folgt aus:Ist es möglich, dass einige Messagebus-Abonnenten Nachrichten im UI-Thread verarbeiten, andere im Hintergrund-Thread?

MessageBus.Current.RegisterScheduler<string>(RxApp.MainThreadScheduler, someContract);

ich einige der Nachricht Abonnenten wollen (die diese Nachricht registrieren) handhaben es in UI-Thread, aber zur gleichen Zeit, einige andere Teilnehmer damit umgehen im Hintergrund Thread.

Hier ist der Anwendungsfall: Einige Abonnenten der Nachricht werden UI-bezogene Daten behandeln, die im UI-Thread passieren müssen. Aber ich möchte die Verwendung von UI-Threads so gering wie möglich halten. Daher möchte ich, dass andere Vorgänge (nicht im Zusammenhang mit UI) im Hintergrundthread passieren. Ist es möglich für ReactiveUI?

Meine aktuelle Lösung ist es, 2 verschiedene Vertragszeichenfolgen zu verwenden, die tatsächlich als 2 verschiedene Nachrichten angesehen werden können. Es funktioniert, aber beide Nachrichten sollten zusammen gesendet werden, was mich redentent fühlen lässt.

Irgendwelche Ideen?

Fei

Antwort

1

ignorieren Vielleicht den Scheduler oder setzen vielleicht stellen Sie Ihren Standard entsprechend (die Standardeinstellung ist CurrentThreadScheduler) und ObserveOn nur zu definieren, verwendet werden, die der Handler ausgeführt wird Scheduler mit, wenn Sie benötigen.

auf dem UI-Thread zu handhaben:

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

genau das, was ich will:

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

auf einem Thread-Pool Gewinde zu behandeln. – Felix