编程语言
首页 > 编程语言> > c#-WinRT上的Rx-在UI线程上分派

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