日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。...

發布時間:2025/3/15 C# 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C# Windows Phone 8 WP8 開發,將WebClient的DownloadStringCompleted事件改成非同步的awiat方法。 原文: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

?

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請注明出處,并且附上本篇文章網址 !? 感謝。

SUKI

HOLIESTAR

https://www.facebook.com/Holiestar https://www.facebook.com/firestar.register

DotBlogs 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方法。...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。