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);