原文: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. ME21N增强提示警告消息

    在ME21N增强中,可以使用message的方法提示错误的消息,但警告消息使用message则提示不了,需要使用系统宏mmpur_message 提示. data:begin of lw_equp, ...

  2. 【剑指offer】和为定值的两个数

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/24933341 题目描写叙述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的 ...

  3. 【android】禁止Edittext弹出软键盘而且使光标正常显示

    /** * 禁止Edittext弹出软件盘,光标依旧正常显示. */ public void disableShowSoftInput() { if (android.os.Build.VERSION ...

  4. ps中图层混合模式算法公式

    网上已经有很多讲解ps的图层混合模式,有些不详细甚至是错误的,参考网上给出的公式及其自己在验证推倒的,给出27种的混合模式算法公式.也许存在一定的错误性,毕竟没有官方给出公式,只能说以供参考吧. 只考 ...

  5. Unity3D游戏开发之开发游戏带来的问题

    昨日曾就某投资人把移动团队失败原因之中的一个归于选择Unity引擎进行了一番评论,工具本身无罪,但怎样理解工具.正确使用Unity引擎确实须要讨论,在选择Unity之前你也许须要了解下这个引擎实际开发 ...

  6. SICP 习题 (2.6) 解题总结:丘奇计数

    SICP 习题 2.6 讲的是丘奇计数,是习题2.4 和 2.5的延续. 这里大师们想提醒我们思考的是"数"究竟是什么,在计算机系统里能够怎样实现"数".准备好 ...

  7. 学习日记之命令模式和Effective C++

    命令模式(Command): 讲一个请求封装为一个对象.从而使你可用不同的请求对客户进行參数化.对请求队列或记录请求日志.以及支持可撤销的操作. 命令模式长处: (1),它能较easy地设计一个命令队 ...

  8. GMM高斯混合模型学习笔记(EM算法求解)

    提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...

  9. Java引用类型具体解释

    JVM  的垃圾回收器对于不同类型的引用有不同的处理方式.java中对于一个对象来说,仅仅要有引用的存在,它就会一直存在于内存中.假设这种对象越来越多,超出了JVM中的内存总数,JVM就会抛出OutO ...

  10. c# Unicode字符串的解码

    前两天工作中遇到个奇怪的问题,一个unicode字符串(即“\uXXXX”形式)变量,调用HttpUtility.UrlDecode解码过后,还是原样,要么就是乱码状态.无奈之下只能自己写一个解码函数 ...