c#-WinRT上的Rx-在UI线程上分派
作者:互联网
我目前刚刚开始使用Rx,到目前为止,它非常有用.但是,从异步方法创建可观察对象并用结果更新UI时遇到了问题.我(不出所料)通过以下代码收到RPC_E_WRONG_THREAD错误:
IDisposable service = null;
service = Observable.FromAsync(fn).Subscribe(videoColl =>
{
foreach (var video in videoColl.Videos)
{
// _videos is an ObservableCollection bound to a GridView's ItemsSource property
_videos.Add(video.SmallImageUrl);
}
});
我看过一些类似的答案,他们建议使用ObserveOnDispatcher或CoreDispatcherScheduler,但它们似乎都不可用.
我正在创建Windows 8.1 UAP应用程序,并且通过Nuget获取了最新版本的Rx(2.2.5).我想知道此发行版中是否缺少UI分派器功能?
解决方法:
通过包含nuget包rx-windowstoreapps,您应该能够获得CoreDispatcherScheduler和ObserveOnDispatcher.
从那里您可以:
service = Observable.FromAsync(fn)
.ObserveOnDispatcher()
.Subscribe(videoColl =>
如果您是从UI线程调用的-我建议您应该在该位置创建注定要更新UI线程的Observable.
如果不能这样做,则需要获取并松散对Dispatcher的引用,并改用.ObserveOn(dispatcher)(其中调度程序是指引用,该引用是从页面或窗口的Dispatcher属性等获取的).
标签:system-reactive,windows-runtime,c 来源: https://codeday.me/bug/20191028/1953827.html