原文: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

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。

C# Windows Phone 8 WP8 开发,将WebClient的DownloadStringCompleted事件改成非同步的awiat方法。的更多相关文章

  1. [笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用。

    原文:[笔记] C# Windows Phone 8 WP8 开发,判断目前网路是否可用. 常常我们在开发Windows Phone 8 App时会使用网路来读取网页的资料或其他开放平台的Json.X ...

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

    原文:C# Windows Phone 8 WP8 开发,取得手机萤幕大小两种方法. 一般我们在开发Windows Phone App时,需要取得萤幕的大小来自定义最佳化控制项的大小,但是开如何取得萤 ...

  3. 刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了

    刚查了,Z3795不支持EPT,即WP8开发必须的SLAT,看来只能作为简单的WINDOWS备机了,也就只能做做文档编辑,脚本编写之类的. 数据来源 http://ark.intel.com/zh-C ...

  4. C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!!

    原文:C# Windows Phone 8 WP8 高级开发,制作不循环 Pivot ,图片(Gallery)导览不求人! 内附图文教学!! 一般我们在开发Winodws Phone APP 的时候往 ...

  5. C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!!

    原文:C# Windows Phone 8 WP8,切换各国语系免重开机 加速开发 送审有效率!! 一般我们在开发Windows Phone 8 时,会考虑到各国语言的问题,但是你有想过吗?用实体手机 ...

  6. Windows Phone 8.1 开发技术概览 (Universal APP)

    前一阵真的比较懒 WP8.1 已经出来这么长时间了现在才更新BLOG让大家久等了,今天我先为大家介绍下 WP 8.1的开发框架,什么是微软所推崇的 Universal APP,以及我们要开发 Univ ...

  7. C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! !

    原文:C# Windows Phone 8 WP8 , 文字超连结到网页 免打程式码,Xaml就搞定 ! ! 一般我们在开发Windows Phone 8 APP ,有时会需要超连结连到其他的网页,但 ...

  8. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  9. Windows下必备的开发神器之Cmder使用说明

    诚言,对于开发码字者,Mac和Linux果断要比Windows更贴心;但只要折腾下,Windows下也是有不少利器的.之前就有在Windows下效率必备软件一文中对此做了下记载:其虽没oh-my-zs ...

随机推荐

  1. Eclipse添加和查看书签

    添加书签: 在编辑框左边栏右击 > Add Bookmark > 编辑书签名称(可以直接使用默认名称)> OK 查看书签: Window > Show View > Ot ...

  2. 在iPhoneApp中加载PDF

    原文: http://ios.biomsoft.com/2012/02/17/load-a-pdf-file-in-the-iphone-app-smoothly/ 本节将学习如何从服务器加载 pdf ...

  3. MySQL查看连接数

    MySQL查看连接数 1.查看部分连接数(数目较多时) show processlist; 2.查看所有连接数(数目较多时) show full processlist;

  4. extjs desktop startmenu (開始菜单)

    extjs desktop 的開始菜单 二级菜单,仅仅是简单演示实现原理,如 须要动态生成,自己改造就可以,下面基本方法原理: 首先 建立一个js文件 生成開始菜单数据:  function Get ...

  5. Codeforces325-B(二分搜索)

    题目:B. Stadium and Games 分析:问题可以转化为下面的等式求解问题: 由于n在10^18范围内,所以k的范围是从0到63即可,这样就可以枚举k,二分m,然后所有符合条件的就是答案了 ...

  6. 人脸对齐ASM-AAM-CLM的一些总结

    源地址:http://blog.csdn.net/piaomiaoju/article/details/8918107 ASM算法相对容易,其中STASM是目前正面脸当中比较好的算法,原作者和CLM比 ...

  7. SuSE(SLES)安装配置syslog-ng日志server,可整合splunk

    Update History 2014年04月25日 - 撰写初稿 引言 在自己主动化部署AutoYast.自己主动化监控BMC Patrol双方面形成雏形后.日志的收集.管理.分析也顺势成为我们须要 ...

  8. 【图像处理】Bilinear Image Scaling

    Bilinear image scaling is about the same as nearest neighbor image scaling except with interpolation ...

  9. Tiny Mapper是一个.net平台开源的对象映射组件

    NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper   阅读目录 1.Tiny Mapper基本介绍 2.Tiny Mapper 基本使用 3.Tiny Mapper 指定配置使用 ...

  10. Mod in math

    An Introduction to Modular Math When we divide two integers we will have an equation that looks like ...