面朝大海 春暖花开

天行健,君子以自强不息; 地势坤,君子以厚德载物; 宠辱不惊,闲看庭前花开花落; 去留无意,漫随天外云卷云舒。 不妄取,不妄予,不妄想,不妄求, 与人方便,随遇而安。 ——《周易》

导航

二十、异步调用的问题

问题描述:

我们在SampleDataSource的构造函数中,将里边的示例代码全部删除,然后添加异步方法LoadFile,即

public SampleDataSource()

{

LoadFile();

},但是运行结果却是Group的数据被加载了,但是其中的数据项未被加载,也就是说数据不显示。
原因
这是典型的异步调用错误。原因也很简单,是因为SampleDataSource的构造函数是同步调用,不会等LoadFile结束后再返回,所以,当界面上显示数据时,显示的只是未加载完成的数据列表。
解决方法:
方法一:
由于构造函数无法变成async调用方法,所以只能用另外的一个显式初始化函数来替代构造函数的作用,在数据显示之前,显式地调用该初始化函数。所以,我就直接将LoadFile作为这个初始化函数,为LoadFile增加public,static和async关键字。
然后,我们打开GroupItemsPage.xaml.cs文件,找到LoadState方法。该方法用来设置当前视图的数据源,所以,我们在LoadState方法的顶部显式调用SampleDataSource.LoadFile方法。当然,我们会得到一个编译错误,因为LoadState方法也是一个同步调用函数,简单地为LoadState方法增加一个async的关键字就可以解决这个问题。
方法二:
public SampleDataSource()

{

_LoadFile();

}
private async Task _LoadFile()

{

await LoadFile();

},

posted on 2013-01-23 15:30  gentle_girl  阅读(171)  评论(0编辑  收藏  举报