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
?
文章中的叙述如有观念不正确错误的部分,欢迎告知指正 谢谢
转载请注明出处,并且附上本篇文章网址 !? 感谢。
HOLIESTAR
DotBlogs Tags:
关连文章
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。
C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。的更多相关文章
- [笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。
原文:[笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用. 常常我们在开发Windows Phone 8 App时会使用网路来读取网页的资料或其他开放平台的Json.X ...
- C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。
原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Phone App时,需要取得萤幕的大小来自定义最佳化控制项的大小,但是开如何取得萤 ...
- 刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了
刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了,也就只能做做文档编辑,脚本编写之类的. 数据来源 http://ark.intel.com/zh-C ...
- C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!
原文:C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!! 一般我们在开发Winodws Phone APP 的时候往 ...
- C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!!
原文:C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!! 一般我们在开发Windows Phone 8 时,会考虑到各国语言的问题,但是你有想过吗?用实体手机 ...
- Windows Phone 8.1 开发技术概览 (Universal APP)
前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...
- C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !
原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...
- windows phone 8.1开发SQlite数据库操作详解
原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...
- Windows下必备的开发神器之Cmder使用说明
诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...
随机推荐
- extjs表单
Ext.onReady(function(){ Ext.BLANK_IMAGE_URL = '../ext/resources/images/default/s.gif'; Ext.QuickTi ...
- efwplus框架
此框架得到博客园大神@张善友的关注,建议我写一篇此框架的最新介绍,好在@dotNet跨平台公众号上推荐给大家,得到大神的指示当然激动,马不停蹄的赶出此文,供大家参考! 一.使用efwplus框架的 ...
- ezw证件照芯片压缩算法
相关网站:http://m.blog.csdn.net/blog/kimwu/12654517 http://blog.sina.com.cn/s/blog_4be751690100bsgb.html ...
- 理解Lambda表达式
1.什么是Lambda表达式 Lambda表达式是一个匿名方法,通常在LINQ中被用来创建委托 简单来说.它是一个没有声明,没有访问修饰符,没有返回值.甚至没有名字的方法. 2.为什么我们需要使用La ...
- Python性能分析指南 - 技术翻译 - 开源中国社区
http://www.oschina.net/translate/python-performance-analysis
- Android万能适配器base-adapter-helper的源代码分析
项目地址:https://github.com/JoanZapata/base-adapter-helper 1. 功能介绍 1.1. base-adapter-helper base-adapter ...
- 灰度共生矩阵(GLCM) 及matlab代码实现
原地址:http://blog.csdn.net/bookwormno1/article/details/7962466 这几天学习灰度共生矩阵,现记录如下: 讲灰度共生矩阵比较好的一份百度文库文档: ...
- 我在开发网站后得出的asp.Net网站优化总结
原文:我在开发网站后得出的asp.Net网站优化总结 asp.Net网站优化总结: 1.数据库优化: 首先是对查询语句的优化,开发时为了图快可以不考虑,但是后期维护时就必须要优化(比如:你调用代码生成 ...
- Codeforces 461B - Appleman and Tree 树状DP
一棵树上有K个黑色节点,剩余节点都为白色,将其划分成K个子树,使得每棵树上都仅仅有1个黑色节点,共同拥有多少种划分方案. 个人感觉这题比較难. 如果dp(i,0..1)代表的是以i为根节点的子树种有0 ...
- Factorization Machines 学习笔记(四)学习算法
近期学习了一种叫做 Factorization Machines(简称 FM)的算法.它可对随意的实值向量进行预測.其主要长处包含: 1) 可用于高度稀疏数据场景:2) 具有线性的计算复杂度.本文 ...