C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...
一般我們在撰寫Windows Phone APP 的時候,很常使用WebClient來幫我們完成抓取網路資料的動作,并且利用DownloadStringCompleted的事件去幫我們得知載入的事件已經完成了,可以讓我們進行下一步的動作,但是若我們想要將WebClient的DownloadStringCompleted事件改成非同步的awiat方法該如何做呢?!可以自訂一延伸WebClient的方法來達成。
?
本篇文章將引導您將WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
?
首先這是Windows Store App上開發時會使用的程式碼,功能是從網路擷取網頁原始資料:
?
1: //網路動作 2: public async Task<string> Download_WebFrom(string url) 3: { 4: HttpClient http = new System.Net.Http.HttpClient(); 5: HttpResponseMessage response = await http.GetAsync(url); 6: return await response.Content.ReadAsStringAsync(); 7: }?
然後成功之後很開心地移植到Windows Phone 8上使用,結果悲劇發的奇怪不能用.....
?
後來改回用原本的WebClient的DownloadStringCompleted事件來達成,功能一樣是從網路擷取網頁原始資料,可是就跟原本的寫法不一樣:
?
1: private void DownloadFromWeb() 2: { 3: ? 4: WebClient wc = new WebClient(); 5: wc.Encoding = Encoding.UTF8; 6: wc.DownloadStringAsync(new Uri(Albums_URL)); 7: wc.DownloadStringCompleted += wc_DownloadStringCompleted; 8: } 9: ? 10: void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 11: { 12: //Debug.WriteLine("wc_DownloadStringCompleted" + e.Result); 13: try 14: { 15: string data = e.Result; 16: } 17: catch(Exception ex) 18: { 19: //網路GG 20: MessageBox.Show(ex.Message); 21: } 22: }?
這樣會造成移植上的困擾還要改一堆其他程式碼實在不方便,
所以索性用延伸WebClient方法的方式來改造一下程式碼。
?
步驟一:
開一個新的類別檔(class),類別的型別是靜態的,并命名為Extensions如下程式碼所示:
?
1: public static class Extensions 2: { 3: public static Task<string> DownloadStringTask(this WebClient webClient, Uri uri) 4: { 5: var tcs = new TaskCompletionSource<string>(); 6: ? 7: webClient.DownloadStringCompleted += (s, e) => 8: { 9: if (e.Error != null) 10: { 11: tcs.SetException(e.Error); 12: } 13: else 14: { 15: tcs.SetResult(e.Result); 16: } 17: }; 18: ? 19: webClient.DownloadStringAsync(uri); 20: ? 21: return tcs.Task; 22: } 23: }?
上述程式碼是將WebClient底下新增一個自定義的方法,那也是使用DownloadStringCompleted的方式來回傳直。
而自訂義的方法名稱為DownloadStringTask。
?
步驟二:
如此一來我們就可以在主程式中使用WebClient底下DownloadStringTask的方法羅!!
?
1: public async Task<string> Download_WebFrom(string url) 2: { 3: WebClient client = new WebClient(); 4: string data = await client.DownloadStringTask(new Uri(url)); 5: return data; 6: ? 7: }?
這樣我們就將將WebClient的DownloadStringCompleted事件改成非同步的awiat方法羅!!
?
?
Refrence : Async await in Windows Phone web access APIs
?
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請注明出處,并且附上本篇文章網址 !? 感謝。
HOLIESTAR
https://www.facebook.com/Holiestar https://www.facebook.com/firestar.registerDotBlogs Tags: C# DownloadStringCompleted DownloadStringTask Visual Studio 2013 WebClient Windows Phone 8
關連文章
C# Windows 8 & 8.1 開發,啟用NavigationCacheMode,以防Navigate導覽至其他頁面時的資料遺失。
[筆記]C# Windows Phone 8 WP8 開發,找回StackPanel底下Orientation消失的屬性。
[筆記] C# Windows Phone 8 WP8 開發,判斷目前網路是否可用。
C# Windows 8、Phone 8 開發,取得控制項中的ItemTemplate內控制項事件的Binding Object。
posted on 2014-03-08 21:38 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/lonelyxmas/p/3588661.html
總結
以上是生活随笔為你收集整理的C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之sqlite的使用 (转
- 下一篇: c# char unsigned_dll