This questionは、UIスケジューラをThrottle
に渡すことで、UIスレッドでIObservable<>.Throttle
が実行されるようにする方法を説明しています。しかし、Observablesは.NET Standard 1.5に基づいた共有ライブラリに定義されています。 .NET StandardにDispatcherScheduler.Instance
と同等のものがありますか?または、消費する(WPF/UWP/etc)ライブラリからスケジューラを注入する必要がありますか?.NET StandardライブラリのDispatcher ISchedulerにアクセス
答えて
クラスDispatcherSchedulerは.NET StandardのSystem.Reactiveアセンブリに存在しません。
可能な回避策は、現在のSynchronizationContext
でSynchronizationContextScheduler
を使用することです。 ObserveOn()
が呼び出されたときにUIスレッドを使用している場合、オブザーバブルのハンドラはUIスレッド上で実行されます。
ObserveOn()
がUIスレッドで呼び出されていない場合、すべてが機能しません。この場合を避けるには、AppContext
オブジェクトを作成し、UIの初期化が行われている間にそのオブジェクトを設定し、アプリケーションで配布可能にします。このAppContext
の中にSynchronizationContext.Current
を保存して、AppContext
があるどこからでもUIスレッドのオブザーバーにすることができます。
IObservable<EventArgs> myObservable = GetSomeObservableEvents();
var myScheduler = new SynchronizationContextScheduler(SynchronizationContext.Current);
myObservable.ObserveOn(myScheduler).Subscribe(ev =>
{
// some code that should run on UI thread
});
は、私は私が上のviewmodels、ビューとを含む.NET標準2.0でアプリのプロジェクトを持っているXamarin.Forms 2.5.0プロジェクト、このようにそれを使用しています。
この回答は、(少なくとも)この条件の下で有効です。
- .NET標準プロジェクトのバージョンである2.0
- System.Reactiveはバージョン4.0.0-preview00001
答えをありがとう。それはしばらくしていましたが、私は同様のアプローチをしてオブザーバーに文脈を渡しました。 –
- 1. .NET Standard 2.0ライブラリからapp.configを読み込む
- 2. CommonServiceLocator .NET Standard 1.4のNuget
- 3. System.Runtime(.net 4.6)とmscorlib(.net Standard 1.6)
- 4. .NET Standard over PCL Xamarin.Forms.Coreプロジェクト
- 5. DataSetとDataRow for Net Standard 1.5
- 6. .Net Standard vs PCL Xamarin Project
- 7. .Net Standard Nuget Framework 4.5プロジェクトにインストール
- 8. .NET Platform Standardのプラットフォームは何ですか?
- 9. Type.GetInterfaces().NET Standard 1.xの回避策
- 10. WindowsストアアプリまたはProfile7 PCLから.NET Standardをターゲットとする参照ライブラリ?
- 11. .NET用.NETライブラリのデプロイ
- 12. appveyorでビルドする.NET Standard 2.0
- 13. NCrunch TestProjects with .net standard/core not working
- 14. .NET Standard 2.0で動作しないソリューションリファレンス
- 15. Azure Cloud Service Classic with .NET Standardターゲット
- 16. Net 4.6.1/4.7からNet Standardを参照する際のエラー
- 17. .NET Framework 4.6.2と.NET Standard 2.0の非互換性
- 18. .NET 4.6.1アプリケーションから.NET Standard 1.3ライブラリを参照すると依存関係が機能しない
- 19. IKVMポートのJavaライブラリの.netリソースにアクセスするには
- 20. ARMプラットフォームの.NET Standard 1.4ライブラリにアセットファイルを含めるにはどうすればよいですか?
- 21. .Net Standard 1.6プロジェクトで.NET 4.5.2クラスライブラリを参照する
- 22. .NET Standard/.NET CoreのType.GetGenericArguments()に相当するものは何ですか?
- 23. 同じBean内の2つのコントローラにアクセス - Dispatcher Servlet
- 24. PEヘッダにアクセスするための.NETライブラリ
- 25. .NET Standard 2の推移的プロジェクト参照を無効にする
- 26. Spring-dispatcher-servlet.xmlからDAOにSessionFactoryにアクセスする方法
- 27. ビルドエラーチームシティ.NET .NETライブラリのリファレンス
- 28. ミュージックタグファインダAPI .NETライブラリ
- 29. .NETのWordライブラリ
- 30. .netの参照.net 4.6.1 .netコアのライブラリ
を持ってはい、すべてのWPF/UWPコードに対してディスパッチスケジューラを使用する必要があります。 – Enigmativity
@Enigmativity DispatcherScheduler.Instanceは.NET標準プロジェクトでは見つかりません。私はSystem.Reactive 4.0(pre)をWPFと.NETの標準プロジェクトで比較しました。 WPFはDispatcherScheduler.Instanceを認識していますが、.NET標準はそうではありません。 –