Wie kann man den UI-Thread richtig beobachten?
-
20-12-2019 - |
Frage
Ich baue Observablen über dem auf Geolocator und Ereignisse müssen im UI-Thread abonniert werden.
Ist ObserveOnDispatcher
veraltet?
Lösung
ObserveOnDispatcher()
ist nicht veraltet, aber wie Paul sagt, ist es im Allgemeinen besser, einen expliziten Scheduler bereitzustellen, damit Sie einen einfügen können TestScheduler
für Unit-Tests.
DispatcherScheduler.Current
kann verwendet werden, um den Strom zu erhalten DispatcherScheduler
- nicht .Instance
, was Sinn macht, da es tatsächlich mehr als einen geben kann – obwohl die meisten Leute diesen bestimmten Weg nicht gehen sollten!
ObserveOnDispatcher()
Und DispatcherScheduler
sind im Windows Phone 8 Rx-Build vorhanden.Sie sind im rx-xaml
Nuget-Paket, das xaml-plattformspezifische Elemente enthält – Sie hätten dies verpasst, wenn Sie es nur eingefügt hätten rx-main
.
Konkret befinden sie sich in der System.Reactive.Windows.Threading.dll
Montage. ObserveOnDispatcher()
ist auf System.Reactive.Linq.DispatcherObservable
Typ, und die Baugruppe hat auch System.Reactive.Concurrency.DispatcherScheduler
.
Andere Tipps
Normalerweise schreibe ich:
.ObserveOn(DispatcherScheduler.Instance)
wenn ich es nicht benutze ReactiveUI.Wenn ja, dann ist es so
.ObserveOn(RxApp.MainThreadScheduler)
Der Unterschied besteht darin, dass in einem Unit-Test-Runner RxApp.MainThreadScheduler
wird automatisch so manipuliert, dass es so ist CurrentThread
, damit Ihre Unit-Tests bestanden werden – andernfalls bleiben sie alle hängen.