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.jeff.wilcox.name/2011/07/creating-a-global-progressindicator-experience-using-the-windows-phone-7-1-sdk-beta-2/
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.wintellect.com/CS/blogs/jgarland/archive/2011/04/18/new-for-windows-phone-now-the-async-ctp.aspx
http://www.cnblogs.com/cracker/archive/2012/08/13/WindowsPhone_AsyncCTP.html#2448086
http://blogs.msdn.com/b/kevinash/archive/2012/02/21/async-ctp-task-based-asynchronous-programming-for-windows-phone.aspx
http://blogs.msdn.com/b/lucian/archive/2012/03/25/asyncctp-installation-problems-and-vs11.aspx
http://blogs.msdn.com/b/lucian/archive/2011/05/20/talk-how-to-write-an-async-connected-app-for-windows-phone-7.aspx
完整執行個體: