dinghao

记录成长点滴

 

silverlight异步陷阱(二)循环

由于异步完成事件不能确定,顺序也不能确定,如果把异步操作放到循环内,可能会产生意想不到的结果。

下面的程序本意是:循环items集合,为每个item赋值。

              foreach (BookRankItem item in items)
              {

//item只有部分属性有值

                  //Debug.WriteLine(item.Index);//输出0,1,2,3
                  EventHandler bookPageHander = (s, e) =>
                  {

                    //为item加载数据

                     BookPage bookPage = service.BookPage;

                      item.LoadFromPage(bookPage);
                      PagedItems.Add(item);
                       Debug.WriteLine(item.Index);//根据网络情况可能是3,3,3,3.只有最后一个
                      };
                   service.Loaded -= bookPageHander;
                  service.Loaded += bookPageHander;
                  service.Load(item.Uri);

 

由于赋值操作在异步内执行,执行完的顺序时间都是随机的,PagedItems内容可能是任意的Item。

如果外层循环到最后一个,异步才开始,会导致PagedItems加载的都是最后一项。

posted on 2011-04-07 11:29 思无邪 阅读(130) 评论(1) 编辑 收藏

评论

#1楼 2011-09-09 10:29 怡盛      

有解决办法么?lz  回复 引用 查看   

导航

统计

公告

昵称:思无邪
园龄:6年1个月
粉丝:20
关注:0

搜索

 
 

常用链接

我的标签

随笔分类

随笔档案

收藏站点

文章收藏

积分与排名

最新评论

阅读排行榜