[英]Accessing Dispatcher IScheduler in .NET Standard libraries
这个问题描述了如何确保IObservable<>.Throttle
通过将UI调度程序传递给Throttle
, Throttle
在UI线程上运行。 但是,我的Observable是在基于.NET Standard 1.5的共享库中定义的。 在.NET Standard中是否有相应的DispatcherScheduler.Instance
,还是应该从使用(WPF / UWP / etc)库中注入Scheduler?
.NET Standard的System.Reactive程序集中不存在DispatcherScheduler类。
可能的解决方法是使用SynchronizationContextScheduler
与当前SynchronizationContext
。 当您在调用ObserveOn()
时在UI线程上时, ObserveOn()
的处理程序将在UI线程上运行。
当没有在UI线程上调用ObserveOn()
,整个过程都不起作用。 为了避免这种情况,您可以创建类似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
});
我在Xamarin.Forms 2.5.0项目中使用它,我在.NET Standard 2.0中有一个包含ViewModels,Views等的应用程序项目。
在这种情况下,这个答案是有效的(至少):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.