私のサービスメソッドはリスナーを取り、それをデータストリームで呼び出す。このストリームをIObservable<T>
に変換しようとしています。これまでのところ、これは私がやったことです:ストリームのリスナーをIObservableに変換する
public class MessageListener : IMessageListener
{
private readonly Subject<string> stream = new Subject<string>();
public IObservable<string> MessageStream
{
get
{
return this.stream;
}
}
public void OnMessageAdded(string message)
{
this.stream.OnNext(message);
}
}
//Calling code
public IObservable<string> GetMessage()
{
var listener = new MessageListener();
service.Subscribe(listener);
listener.MessageStream.SubscribeOn(Scheduler.NewThread);
}
私はこれで十分ですか分かりません。私はSubscribeOn
への呼び出しを信じて、新しいスレッドでサブスクリプションコードだけを実行します。 OnMessageAddedが新しいスレッドによって受信されたことをどうやって確認しますか?
私はGetMessageメソッドを呼び出すViewModelレベルでsubcribeを呼び出し、ObserveOnDispatcher()も実行しています。 – anivas
おそらく、サービスが実際に何をしているかについてより多くの情報を提供するべきでしょう。私は、サービスがMessageStreamに加入していて、メッセージを別のスレッドで処理したいと思っています。そのため、サービス内でObserveOn(Scheduler.NewThread)を呼び出す必要があります。それとも、私はあなたを完全に間違っていますか? – Christoph
メッセージストリームがリストボックスに表示されるwpfアプリケーションです。 GetMessage()メソッドは、service.Subscribe(listener)を呼び出してデータをストリームする実際のJavaサービスを呼び出すServiceProxyクラスです。このストリームをリッスンするserviceproxyからUIスレッドを切断したいと思います。そうでなければ、UIがストリームが入るたびにフリーズします。 – anivas