Windows Phone 利用Async CTP实现异步加载数据
Async CTP是个好东西额,就是安装的时候比较坑…
跟N多补丁冲突,只要安装顺序对了才能顺利装上…
可以参考下以前写的:http://www.cnblogs.com/sun8134/archive/2011/09/19/2181030.html
异步是个好东西,可以让后台数据操作时前台也有反应而不是卡死
安装好Async CTP后,只要在wp项目中引用AsyncCtpLibrary_Phone.dll就可以使用async和await来实现异步加载了
MS已经封装好了一些异步操作,比如WebClient里就可以直接使用:
Uri ui = new Uri(urls);
System.Net.WebClient wc1 = new System.Net.WebClient();
string txs = await wc1.DownloadStringTaskAsync(ui);
下面来介绍下如何自己使用async和await来实现异步加载数据
实例中我们的目的是加载一个xml,并将数据绑定到listbox上来
首先我随便找了个学生成绩的XML
然后制作一个数据类students.cs
然后再编辑下listbox的绑定模板:
然后我们还需要一个ProgressIndicator,好在加载数据时给用户一个提示,我比较偷懒一直在用别人现成的一个东东
关于咋用这个东东大家去看作者的介绍吧:
http://www.cnblogs.com/alexis/archive/2011/09/04/2165994.html
大概效果:
前台的东西大体差不多了
下面主要是code behind里的代码事件了
首先我们要写一个方法来从xml中读取数据
private ObservableCollection<students> loaddata()
{
XDocument xdoc = XDocument.Load("data.xml");
ObservableCollection<students> studentsdataCollection = new ObservableCollection<students>();
foreach (XElement element in xdoc.Element("学生成绩单").Descendants("学生成绩"))
{
studentsdataCollection.Add(new students()
{
stu_No = element.Element("学号").Value,
stu_Name = element.Element("姓名").Value,
stu_English = element.Element("外语").Value,
stu_Mathematic = element.Element("高等数学").Value,
stu_Physics = element.Element("大学物理").Value,
stuno_Politics = element.Element("政治").Value,
stu_Sports = element.Element("体育").Value,
stu_Total = element.Element("总分").Value
});
}
//Thread.Sleep(5000);
return studentsdataCollection;
}
然后在页面加载事件里用async和await来实现异步调用这个方法,并将数据绑定到listbox上
private async void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
{
GlobalIndicator.Instance.BusyForWork("正在加载数据,请稍候...");
ObservableCollection<students> d1=await Task<ObservableCollection<students>>.Factory.StartNew(new Func<ObservableCollection<students>>(loaddata));
base.Dispatcher.BeginInvoke(() =>
{
listbox1.ItemsSource = d1;
});
GlobalIndicator.Instance.WorkDone();
}
其实很简单,看看大概效果(由于读取XML比较快,所以我加了Thread.Sleep(5000); 由于是异步加载,所以加载过程中可以正常切换Pivot Item):
大概就在这么多,更多信息将看:
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
http://www.cnblogs.com/cracker/archive/2012/08/13/WindowsPhone_AsyncCTP.html#2448086
http://blogs.msdn.com/b/lucian/archive/2012/03/25/asyncctp-installation-problems-and-vs11.aspx
完整实例: