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方法。...相关推荐

  1. C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法。

    C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Ph ...

  2. windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!

    90% 对于电脑的不满,都逃不出这几个方面:电脑状态无法随时监测.运行卡顿.开机时间长.莫名黑屏.电池关键时刻不扛使(笔记本电池怎么保养?能不能一直插电源充电?可以戳这里→),很多小伙伴就选择安装第三 ...

  3. Windows Phone 7应用开发指南

    Windows Phone 7应用开发指南 伏英娜编著 ISBN 978-7-121-14609-1 2011年11月出版 定价:69.00元 16开 508页 宣传语:微软官方独家奉献:深度透视移动 ...

  4. Windows 10 搭建Python开发环境(PyCharm )

    Windows 10 搭建Python开发环境(PyCharm ) 一.安装Python3 二.安装Pycharm 怎么使用PyCharm编写Python程序,简单教程. windows下安装pyth ...

  5. 如何在Windows上做Python开发?微软出了官方教程(附链接)

    来源:机器之心 本文附教程,建议阅读5分钟. 本文为你分享微软最近发布的关于在Windows上做Python开发的一系列官方教程. 在Windows上做Python开发太痛苦?微软最近发布了一系列官方 ...

  6. Windows文件系统过滤驱动开发教程(0,1,2)

    0. 作者,楚狂人自述 我长期网上为各位项目经理充当"技术实现者"的角色.我感觉Windows文件系统驱动的开发能找到的资料比较少.为了让技术经验不至于遗忘和引起大家交流的兴趣我以 ...

  7. Jenkins持续集成学习-Windows环境进行.Net开发4

    目录 Jenkins持续集成学习-Windows环境进行.Net开发4 目录 前言 目标 Github持续集成 提交代码到Github 从Github更新代码 git上显示构建状态 自动触发构建 Gi ...

  8. Windows Phone 8初学者开发—第22部分:用演示图板创建卷盘的动画

    原文 Windows Phone 8初学者开发-第22部分:用演示图板创建卷盘的动画 第22部分: 用演示图板创建卷盘的动画 原文地址:http://channel9.msdn.com/Series/ ...

  9. Xamarin.Forms教程下载安装Windows版的Xamarin开发工具

    Xamarin.Forms教程下载安装Windows版的Xamarin开发工具 下载安装Windows版的Xamarin开发工具 本节将讲解如何下载并安装Windows版的Xamarin开发工具. 下 ...

最新文章

  1. 2021全球最具影响力 AI 学者榜单: 中国占比11.1%,位列第二
  2. Kaneboy:临时启事:寻找在北京,熟悉SPS、ASP.NET,有两周空闲时间的朋友
  3. Spring Boot连接多个Redis库配置方案及代码示例
  4. 吴恩达给 74 岁老父亲发证了!8 年完成 146 门课程!
  5. 2008技术内幕:T-SQL语言基础 联接查询摘记
  6. A*,IDA*—高档次的暴搜
  7. [转]Spring事务tx:annotation-driven/
  8. Java深入 - servlet和Spring的DispatcherServlet详解
  9. 三星官方回应“7nm EUV良率”:内容与事实完全不符
  10. C语言学习笔记---字符串对比函数strspn()和strcspn()函数
  11. canvas.clipPath canvas.clipRect() 无效的原因
  12. mysql的json使用
  13. ***测试执行标准(Penetration Testing Execution Standard:PTES)
  14. 用易语言对DNF卡顿进行批处理
  15. Vue+ElementUI实现简单的用户管理系统(四):查看用户详情页及删除用户
  16. 淘宝API开发系列---阿里.聚石塔.开放平台的使用
  17. 使用 HTML、CSS 和 JS 的简单倒数计时器
  18. TPP并不可怕,可怕的是我们开始自我封闭
  19. pytorch(9)-- 利用resnet18使cifa10数据集达到95%准确率
  20. 最新亿级流量电商详情页系统的大型高并发与高可用缓存架构实战第一版附全套资料

热门文章

  1. 用框图说明计算机控制系统,计算机控制系统试题
  2. python3纵向输出字符串_笔记||Python3之字符串格式化输出
  3. 千锋教育python全集_千锋python+人工智能最新视频教程(大全集)
  4. WebQML笔记-qml获取canvas中元素是否被按下
  5. Qt笔记-添加Win10Pcap库获取网络适配器(MinGW编译器)
  6. OllyDbg笔记-寄存器以及各种关键指令解析(含简单程序破解)
  7. 系统架构师学习笔记-操作系统(二)
  8. delay在java中有什么用_java中DelayQueue的使用
  9. java writedouble_Java FSDataOutputStream.writeDouble方法代碼示例
  10. 无限级分类 php_php无限极分类的方法是什么