C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...
一般我們在撰寫Windows Phone APP 的時(shí)候,很常使用WebClient來幫我們完成抓取網(wǎng)路資料的動(dòng)作,并且利用DownloadStringCompleted的事件去幫我們得知載入的事件已經(jīng)完成了,可以讓我們進(jìn)行下一步的動(dòng)作,但是若我們想要將WebClient的DownloadStringCompleted事件改成非同步的awiat方法該如何做呢?!可以自訂一延伸WebClient的方法來達(dá)成。
?
本篇文章將引導(dǎo)您將WebClient的DownloadStringCompleted事件改成非同步的awiat方法。
?
首先這是Windows Store App上開發(fā)時(shí)會(huì)使用的程式碼,功能是從網(wǎng)路擷取網(wǎng)頁原始資料:
?
1: //網(wǎng)路動(dòng)作 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上使用,結(jié)果悲劇發(fā)的奇怪不能用.....
?
後來改回用原本的WebClient的DownloadStringCompleted事件來達(dá)成,功能一樣是從網(wǎng)路擷取網(wǎng)頁原始資料,可是就跟原本的寫法不一樣:
?
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: //網(wǎng)路GG 20: MessageBox.Show(ex.Message); 21: } 22: }?
這樣會(huì)造成移植上的困擾還要改一堆其他程式碼實(shí)在不方便,
所以索性用延伸WebClient方法的方式來改造一下程式碼。
?
步驟一:
開一個(gè)新的類別檔(class),類別的型別是靜態(tài)的,并命名為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底下新增一個(gè)自定義的方法,那也是使用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
?
文章中的敘述如有觀念不正確錯(cuò)誤的部分,歡迎告知指正 謝謝
轉(zhuǎn)載請注明出處,并且附上本篇文章網(wǎng)址 !? 感謝。
HOLIESTAR
https://www.facebook.com/Holiestar https://www.facebook.com/firestar.registerDotBlogs Tags: C# DownloadStringCompleted DownloadStringTask Visual Studio 2013 WebClient Windows Phone 8
關(guān)連文章
C# Windows 8 & 8.1 開發(fā),啟用NavigationCacheMode,以防Navigate導(dǎo)覽至其他頁面時(shí)的資料遺失。
[筆記]C# Windows Phone 8 WP8 開發(fā),找回StackPanel底下Orientation消失的屬性。
[筆記] C# Windows Phone 8 WP8 開發(fā),判斷目前網(wǎng)路是否可用。
C# Windows 8、Phone 8 開發(fā),取得控制項(xiàng)中的ItemTemplate內(nèi)控制項(xiàng)事件的Binding Object。
posted on 2014-03-08 21:38 NET未來之路 閱讀(...) 評論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/3588661.html
總結(jié)
以上是生活随笔為你收集整理的C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之sqlite的使用 (转
- 下一篇: Prim和Kruskal求最小生成树