This question描述如何确保IObservable<>.Throttle
通过将UI调度程序传递到Throttle
而在UI线程上运行。但是,我的观察对象是在基于.NET Standard 1.5的共享库中定义的。在.NET标准中是否有等效的DispatcherScheduler.Instance
或者我应该从使用(WPF/UWP/etc)库注入调度程序?在.NET标准库中访问调度程序IScheduler
3
A
回答
1
DispatcherScheduler类不存在于.NET Standard的System.Reactive程序集中。
可能的解决方法是使用SynchronizationContextScheduler
与当前SynchronizationContext
。当您在UI线程上调用ObserveOn()
时,observable的处理程序将在UI线程上运行。
当ObserveOn()
未在UI线程上调用时,整件事情都不起作用。为了避免这种情况,您可以创建类似于AppContext
对象的对象,在UI初始化发生时进行设置,并在应用程序中将其分配。将SynchronizationContext.Current
保存在此AppContext
之内,并且您可以从您拥有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 2.0标准包含的ViewModels,意见等这样使用它。
这个答案是有效的(至少)此条件下:
- .NET标准项目版本是2.0
- System.Reactive具有版本4.0.0-preview00001
+0
感谢您的回答。它已经有一段时间了,但是从记忆来看,我采用了类似的方法,并将上下文传递给观察者。 –
相关问题
- 1. 问题,而在标准的.Net类库引用.net库中
- 2. 如何在SQL中调用标准的.NET程序集
- 3. 程序访问调用堆栈.net
- 4. .NET中的System.Runtime.CompilerServices标准库
- 5. .Net应用程序标准图标集
- 6. msbuild builderror for .net标准库
- 7. 类库.NET标准和mscorlib.dll
- 8. NET标准库引用.NETCore
- 9. 如何在asp.net中访问Outlook的调度程序
- 10. 调试 - 引用.NET标准1.4 Xamarin.Forms Android应用程序库(VS 2017)
- 11. 合并.NET标准程序集
- 12. 为多线程GAE应用程序调度请求的标准
- 13. 用于访问PE标题的.NET库
- 14. 从内存中访问.net程序
- 15. 使用Azure IOT库创建Xamarin.Forms .Net标准应用程序?
- 16. 当引用.net标准类库时找不到System.Runtime程序集
- 17. .Net标准库是否支持Windows7 WPF应用程序?
- 18. 使用.NET标准库的ASP.NET Web应用程序
- 19. .NET核心与标准.NET库性能
- 20. Microsoft.AspNetCore.TestHosts不能在.NET 1.6标准类库
- 21. 多线程数据库访问(.NET)
- 22. .NET标准中的GetMethod等效标准
- 23. 从库中获取WPF调度程序
- 24. Hadoop度量标准问题
- 25. Calltree for C++程序到标准库
- 26. 标准图片库应用程序
- 27. 无法加载.Net标准2.0类库中的文件或程序集错误
- 28. 从.NET应用程序Android数据库访问
- 29. 在本地访问ruby标准库文档
- 30. Windows标准库中的定义不可访问
是的,你应为所有WPF/UWP代码使用调度调度程序。 – Enigmativity
@Enigmativity DispatcherScheduler.Instance在.NET标准项目中找不到。我只是比较了WPF和.NET标准项目中的System.Reactive 4.0(pre)。 WPF仍然知道DispatcherScheduler.Instance,.NET标准没有。 –