gpt4 book ai didi

windows-phone-8 - 接收 2.1 : How to subscribe and observe on Dispatcher correctly

转载 作者:行者123 更新时间:2023-12-04 23:24:29 33 4
gpt4 key购买 nike

首先,我使用的是最新的 Rx,即 2.1。据我所知,当 Rx 变成 2 时,很多事情都发生了变化,所以我真的很期待收到最新的答案。提前致谢。

我正在为 Rx 执行一项经典任务:观察 TextBox 的文本(确切地说是来自 WPToolkit 的 AutoCompleteBox),以便向用户提供建议列表。建议取自网络,我想使用这些普通的 Rx 好东西,比如 Throttle、DistinctUntilChanged 等。

我还在使用最近发布的用于 Windows Phone 8 的可移植 HttpClient,因为它提供了基于任务的异步 API,这很好。

我遇到的问题是在阅读 Text 时的跨线程访问'AutoCompleteBox` 的值。这是代码:

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(), new GeoCoordinate(51, 13)))
.Select(async (results) => searchBox.ItemsSource = await results)
.ObserveOn(uithread)
.Subscribe();
searchFunc时发生异常被执行。我从 VS 看到它在工作线程上执行,尽管我使用了 SubscribeOn。

这是使用 SynchronizationContextScheduler 的示例,但我也试过 SubscribeOnDispatcher ,结果相同。看起来我遗漏了一些重要的东西 ObserveOn东西,或者可能是关于 Observable.FromAsync .你能指出我的错误吗?

最佳答案

SubscribeOn几乎从来都不是你想要的——你可能认为它的意思是“我的 Subscribe 方法运行的地方”,但它实际上意味着“到 IDisposable(和处置)的实际接线运行的地方”-ObserveOn相当于“这是我希望我的实际 Subscribe 代码执行的地方”

引用:Observable.SubscribeOn and Observable.ObserveOn

关于windows-phone-8 - 接收 2.1 : How to subscribe and observe on Dispatcher correctly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15145040/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com