二十、异步调用的问题
问题描述:
我们在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) 编辑 收藏 举报