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 思无邪 阅读(...) 评论(...) 编辑 收藏

导航

统计

公告