Windows Phone 利用Async CTP實現非同步載入資料

來源:互聯網
上載者:User

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

 

 

完整執行個體:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.