Windows   发布时间:2022-05-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了windows-phone-8 – Rx 2.1:如何在Dispatcher上正确订阅和观察大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
首先,我使用最新的Rx,即2.1.据我所知,当Rx变为2时,很多事情都发生了变化,所以我真的很期待收到最新的答案.提前致谢.

我正在为Rx实现一个经典任务:观察TextBox的文本(确切地说是来自WPToolkit的AutoCompleteBoX),以便向用户提供建议列表.建议来自网络,我想使用这些普通的Rx好东西,如Throttle,DisTinctUntilChanged等.

我也在使用最近发布的适用于Windows Phone 8的便携式httpClient,因为它提供了基于任务的异步API,这很不错.

我遇到的问题是在读取’AutoCompleteBox`的Text值时的跨线程访问.这是代码:

var http = new httpClient();
var searchFunc = Observable.FromAsync<httpResponsemessage>(() => 
            http.GetAsync(FormatUrl(SEARCH_URL,"DE",new GeoCoordinate(51,13),searchBox.Text /* <-- causes exception */,10,"")));

var uithread = new SynchronizationContextscheduler(SynchronizationContext.Current);
var textChange = Observable.FromEventPattern<RoutedEventArgs>(searchBox,"TextChanged")                             
        .Throttle(TimeSpan.FromMilliseconds(800))
        .DisTinctUntilChanged()     
        .SubscribeOn(uithread)           
        .SELEctMany(searchFunC)                
        .SELEct(async (resp) => SearchResultsParser.ParseSearchResults(await resp.Content.ReadAsStreamAsync(),13)))
        .SELEct(async (results) => searchBox.Itemssource = await results)
        .observeOn(uithread)
        .Subscribe();

执行searchFunc时会发生异常.我从VS看到它在Worker Thread上执行,尽管我使用了SubscribeOn.

这是使用SynchronizationContextscheduler的示例,但我也尝试了SubscribeOnDispatcher,结果相同.看起来我遗漏了一些重要的东西,或者Observable.FromAsync.你能不能指出我的错误?

解决方法

SubscribeOn几乎不是你想要的 – 你可能认为它意味着“我的订阅方法运行的地方”,但它实际上意味着“IDisposable(和处理)的实际连线运行” – ObserveOn相当于“这就是我的地方”希望我的实际订阅代码执行“

:Observable.SubscribeOn and Observable.observeOn

大佬总结

以上是大佬教程为你收集整理的windows-phone-8 – Rx 2.1:如何在Dispatcher上正确订阅和观察全部内容,希望文章能够帮你解决windows-phone-8 – Rx 2.1:如何在Dispatcher上正确订阅和观察所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:首先