ReactivePropertyをUWPの共有コントラクトで使う時の注意
共有コントラクト
UWPではWindows8, 8.1時代と同様の方法で共有コントラクトを実装することが可能です。
ただ、UWPでは共有コントラクトと普通にアプリを起動した時の画面のUIスレッドが異なるにも関わらず、 同時に起動しても一つのインスタンスしか参照しないため、 メインのアプリを起動した状態で共有コントラクトを開きReactivePropertyで通知を行おうとすると、 メインの画面側のUIスレッドで通知を行なってしまうため例外が発生します。 (おそらくWin8.1等でも)
幸いReactivePropertyでは通知するスレッドを明示的に指定できるので、以下の様なコードを書けば問題なく使えるようになります。
var uiThreadScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current); var prop = new ReactiveProperty<string>(uiThreadScheduler); var prop2 = this.Model.Properties.ToReadOnlyReactiveCollection(x => new PropModel(x), uiThreadScheduler);