2016-06-13 15 views
1

私はreactui/rxアプリを持っています。現在、私はデスクトップパーツを開発中ですので、wpfアプリケーションです。私はパフォーマンスの理由から、別のスレッドで各ウィンドウを作成したいと思います。また、このコードは、私が呼び出しスレッドでObserveOn()を強制する方法は?

System.Threading.Threadクラスを使用することはできません理由です、ポータブルlibにあり、私は、現在のスレッド上で実行されるObserveOnを必要としている理由

someCollection.Changed.Buffer(TimeSpan.FromSeconds(n)).ObserveOn(*should be a link to a current thread*).Subscribe(bufferedItems => {}) 

回避策はありますか?

+0

「現在のスレッド」とはそれはUIスレッドですか、それともランダムなスレッドですか? UI /メインスレッドの場合は、 'ObserveOn'のパラメータとして' SynchronizationContext'.Currentを使用することができますが、それが任意のスレッドであれば、あなた自身のスケジューラを書く必要があります(少なくとも、これを行う人の) – kha

+0

新しいスレッドでウィンドウを作成して、ウィンドウオブジェクトに別のディスパッチャがあるようにします(このhttps://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-スレッド/)。 SynchronizationContext.Currentは動作しません。なぜなら、ui-threadから呼び出されていなければ、常にnullを返すからです。私はすでに自分のスケジューラーを書こうとしましたが、既存のものを再利用するのではなく、新しいスレッドを作成するのが仕事です。 –

答えて

2

Dispatcherをキャプチャできる場合は、DispatcherSchedulerに提供することができます。

var currentDispatcher = Dispatcher.CurrentDispatcher; 
var scheduler = new DispatcherScheduler(currentDispatcher); 

Observable.Empty<int>().ObserveOn(scheduler).... 
+0

はい!それでおしまい。どうもありがとう! –

関連する問題