Web services 在RX中检测到未完成的问题

Web services 在RX中检测到未完成的问题,web-services,windows-phone-7,system.reactive,Web Services,Windows Phone 7,System.reactive,我在RX中检测未完成的操作时遇到问题。 我正在从web服务将数据加载到ListBox 基本情况良好:-“已完成项目”位于底部 App.ViewModel.LoadData(); IObservable observable=App.ViewModel.Items .ToObservable(Scheduler.NewThread); var items=新的ObservableCollection(); ListBox1.ItemsSource=项目; ObserveOnDispatcher()

我在RX中检测未完成的操作时遇到问题。 我正在从web服务将数据加载到ListBox

基本情况良好:-“已完成项目”位于底部

App.ViewModel.LoadData();
IObservable observable=App.ViewModel.Items
.ToObservable(Scheduler.NewThread);
var items=新的ObservableCollection();
ListBox1.ItemsSource=项目;
ObserveOnDispatcher().Subscribe(
item=>{items.Add(新的WebServiceClass.ItemGetValues(item.nazwa,item.skrot,item.id));},
()=>{items.Add(新的WebServiceClass.ItemGetValues(“Complited”、“”、“”);}
);
但当我为每个项目调用web服务时,首先会添加“Complited item”下面的代码

App.ViewModel.LoadData();
IObservable observable=App.ViewModel.Items
.ToObservable(Scheduler.NewThread);
var items=新的ObservableCollection();
ListBox1.ItemsSource=项目;
ObserveOnDispatcher().Subscribe
(项目=>
{
//项目。添加(项目);
var request=Observable.FromAsyncPattern(client.BeginGetLastValue,client.EndGetLastValue);
请求(item.skrot).ObserveOnDispatcher().Subscribe(
(it)=>
{
Func反序列化优先=r=>
((列表)JsonConvert
.反序列化对象(r,
类型(列表)
.First();
item.zm_dzienna=反序列化第一(it).zm_dzienna;
项目。添加(项目);
}
);
},
()=>{items.Add(新的WebServiceClass.ItemGetValues(“Complited”,“Complited”,“0”);}
);
如何正确检测未完成的操作?

解决方案 反序列化第一个函数中出现nullReference异常问题。

App.ViewModel.LoadData();
IObservable observable=App.ViewModel.Items
.ToObservable(Scheduler.NewThread);
var items=新的ObservableCollection();
ListBox1.ItemsSource=项目;
var request=Observable.FromAsyncPattern(client.BeginGetLastValue,client.EndGetLastValue);
可观察的,可选择的(
item=>request(item.skrot)。选择(it=>{
Func反序列化优先=r=>
((列表)JsonConvert
.反序列化对象(r,
类型(列表)
.First();
item.zm_dzienna=反序列化第一(it).zm_dzienna;
退货项目;
})
).SubscribeOnDispatcher().Subscribe(
结果=>{Dispatcher.BeginInvoke(委托{items.Add(result);});},
()=>{Dispatcher.BeginInvoke(委托{items.Add(新WebServiceClass.ItemGetValues(“c”、“c”、“c”);})
);
致以最良好的祝愿,
Łukasz

您需要将内部查询拉入到to Rx序列中,而不是从订阅中运行它。这样做可以让您获得Rx的强大功能、可组合性和可测试性。让你得到你想要的结果

这是朝着需要的方向迈出的一步

Func<string, WebServiceClass.ItemGetValues> deserializeFirst = r =>
        ((List<WebServiceClass.ItemGetValues>)JsonConvert
        .DeserializeObject(r,typeof(List<WebServiceClass.ItemGetValues>)))
        .First();
var request = Observable.FromAsyncPattern<string, string>(client.BeginGetLastValue, 
                                                          client.EndGetLastValue);
observable
    .SelectMany((item) => request(item.skrot))
    .Select((it) => item.zm_dzienna = deserializeFirst(it).zm_dzienna)
    .ObserveOnDispatcher()
    .Subscribe(
        item => items.Add(item), 
        () => items.Add(new WebServiceClass.ItemGetValues("Complited", "Complited", "0")));
Func反序列化优先=r=>
((列表)JsonConvert
.DeserializeObject(r,typeof(List)))
.First();
var request=Observable.FromAsyncPattern(client.BeginGetLastValue,
client.EndGetLastValue);
可观察
.SelectMany((item)=>request(item.skrot))
.选择((it)=>item.zm_dzienna=反序列化第一个(it).zm_dzienna)
.ObserveOnDispatcher()
.订阅(
item=>items.Add(item),
()=>items.Add(新的WebServiceClass.ItemGetValues(“Complited”、“Complited”、“0”));

我找到了解决方案。正如您所看到的,Func反序列化首先必须在查询RX语句中,因为您将以另一种方式获得NullPointer异常。我觉得那看起来很不错:)。谢谢我认为我的版本工作得很好,但我也有反序列化第一个函数的空引用异常。。。我错过了什么?错误:“Newtonsoft.Json.WindowsPhone.dll中发生了类型为'System.NullReferenceException'的未经处理的异常”作为对我的无意义评论的补偿,我修复了解决方案上的缩进以便于理解