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的方法来达成。
原文: 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。

目录
相关文章
|
8月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
4483 123
|
9月前
|
Ubuntu Unix Linux
在Windows上轻松安装和使用Ubuntu的方法详解
继续点击“Continue”按钮以继续安装流程,随后选择清理磁盘并安装操作系统的选项。 接下来,在安装过程中,你需要选择时区。为了与你的地理位置相匹配,请选择中国上海作为你的时区设置。 在安装过程中,你还需要设置计算机的名称以及账号密码。请务必牢记这些信息,因为它们将作为你登录系统的凭证。
|
10月前
|
Linux Windows
Windows 10/11从官网下载ISO的方法
本文介绍了两种从微软官网下载Windows 10/11 ISO镜像的方法。一是通过修改浏览器User Agent为Linux系统,使官网提供ISO下载链接;二是使用UUPDUMP工具,从官网下载并转换为ISO格式,支持最新开发版,操作简便。
|
8月前
|
运维 iOS开发 Windows
windows电脑备案ios APP获取公钥和证书指纹Sha-1值的方法
在阿里云进行APP备案、在备案IOS端的环节的时候,发现需要我们将p12证书安装在电脑上,再用xcode或或钥匙串访问来获取这个证书的公钥和sha-1值。 但是大部分开发uniapp应用的同学们,或者进行发布的运维人员的电脑都是windows,无法按照阿里云的教程来获取ios的公钥和sha-1。备案就被卡主了。 这里介绍下另一个方法,就是使用香蕉云编来在线上传证书获取。如下图所示,打开香蕉云编后,找到下图这个功能
1135 0
|
存储 安全 UED
Cyber Triage 3.13 for Windows - 数字取证和事件响应
Cyber Triage 3.13 for Windows - 数字取证和事件响应
403 71
Cyber Triage 3.13 for Windows - 数字取证和事件响应
|
物联网 数据处理 C#
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据
C#实现上位机开发,串口通信,读写串口数据并处理16进制数据。在自动化、物联网以及工业控制行业中,上位机开发是一项重要的技能。本教程主要介绍使用C#进行上位机开发,重点在于串口通信和数据处理。
2717 82
|
存储 安全 虚拟化
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
2256 0
Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2025 年 2 月更新)
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
540 0