.Net2.0中新增了很多组件,WebClient就是其中一个,功能也很强大,今天拿WebClient做了一个小实验,只用到了一些很简单的功能就可以实现以前不好实现的功能,很方便。

简单介绍一下WebClient:
    WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。
    WebClient 类使用 WebRequest 类提供对资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。
    注意
    默认情况下,.NET Framework 支持以 http:、https:、ftp:、和 file: 方案标识符开头的 URI。

下面描述用于将数据上载到资源的 WebClient 方法: 
    OpenWrite  检索一个用于将数据发送到资源的 Stream。
    OpenWriteAsync  检索 Stream,它在不阻止调用线程的情况下将数据发送到资源。
    UploadData  将字节数组发送到资源,并返回包含任何响应的 Byte 数组。
    UploadDataAsync  在不阻止调用线程的情况下,将 Byte 数组发送到资源。
    UploadFile  将本地文件发送到资源,并返回包含任何响应的 Byte 数组。
    UploadFileAsync  在不阻止调用线程的情况下,将本地文件发送到资源。
    UploadValues  将 NameValueCollection 发送到资源,并返回包含任何响应的 Byte 数组。
    UploadValuesAsync  在不阻止调用线程的情况下,将 NameValueCollection 发送到资源,并返回包含任何响应的 Byte 数组。
    UploadString  在不阻止调用线程的情况下,将 String 发送到资源。
    UploadStringAsync  在不阻止调用线程的情况下,将 String 发送到资源。

下面描述从资源下载数据的 WebClient 方法: 
    OpenRead  从资源以 Stream 的形式返回数据。
    OpenReadAsync  在不阻止调用线程的情况下,从资源返回数据。
    DownloadData 从资源下载数据并返回 Byte 数组。
    DownloadDataAsync  在不阻止调用线程的情况下,从资源下载数据并返回 Byte 数组。
    DownloadFile  从资源将数据下载到本地文件。
    DownloadFileAsync  在不阻止调用线程的情况下,将数据从资源下载到本地文件。
    DownloadString  从资源下载 String 并返回 String。
    DownloadStringAsync  在不阻止调用线程的情况下,从资源下载 String。

您可以使用 CancelAsync 方法取消尚未完成的异步操作。
    默认情况下,WebClient 实例不发送可选的 HTTP 报头。如果您的请求需要可选报头,必须将该报头添加到 Headers 集合。例如,要在响应中保留查询,必须添加用户代理报头。此外,如果用户代理标头丢失,服务器可能返回 500(内部服务器错误)。
    在 WebClient 实例中,AllowAutoRedirect 设置为 true。
    给继承者的说明 派生类应调用 WebClient 的基类实现,以确保派生类按预期方式工作。

实现源码为:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Net;
  9. using System.IO;
  10. namespace wiindowsFormsApplication
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. this.textBox1.Text = @"http://dl-sh-ocn-1.pchome.net/0d/bx/koomail50b8.rar";
  18. }
  19. WebClient webClient = new WebClient();
  20. private void btn_down_Click(object sender, EventArgs e)
  21. {
  22. if (webClient.IsBusy)//是否存在正在进行中的Web请求
  23. {
  24. webClient.CancelAsync();
  25. }
  26. //为webClient添加事件
  27. webClient.DownloadProgressChanged +=new DownloadProgressChangedEventHandler(webClient_DownloadProgressChanged);
  28. webClient.DownloadFileCompleted+=new AsyncCompletedEventHandler(webClient_DownloadFileCompleted);
  29. //开始下载
  30. webClient.DownloadFileAsync(new Uri(this.textBox1.Text), "aa.rar");
  31. }
  32. private void webClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
  33. {
  34. this.progressBar1.Value = e.ProgressPercentage;
  35. this.lbl_pro.Text = e.ProgressPercentage.ToString() + "%";
  36. this.lbl_detail.Text = string.Format("正在下载文件,完成进度{0}/{1}(字节)"
  37. ,e.BytesReceived
  38. ,e.TotalBytesToReceive);
  39. }
  40. private void webClient_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
  41. {
  42. if (e.Cancelled)
  43. MessageBox.Show("下载被取消!");
  44. else
  45. MessageBox.Show("下载完成!");
  46. }
  47. private void btn_cancel_Click(object sender, EventArgs e)
  48. {
  49. this.webClient.CancelAsync();
  50. this.webClient.Dispose();
  51. }
  52. }
  53. }

运行界面:

转载:http://blog.sina.com.cn/s/blog_6e51df7f0100sw6t.html

WebClient实现文件下载详解(二)的更多相关文章

  1. .NET DLL 保护措施详解(二)关于性能的测试

    先说结果: 加了缓存的结果与C#原生代码差异不大了 我对三种方式进行了测试: 第一种,每次调用均动态编译 第二种,缓存编译好的对象 第三种,直接调用原生C#代码 .net dll保护系列 ------ ...

  2. PopUpWindow使用详解(二)——进阶及答疑

      相关文章:1.<PopUpWindow使用详解(一)——基本使用>2.<PopUpWindow使用详解(二)——进阶及答疑> 上篇为大家基本讲述了有关PopupWindow ...

  3. Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)

    [Android布局学习系列]   1.Android 布局学习之——Layout(布局)详解一   2.Android 布局学习之——Layout(布局)详解二(常见布局和布局参数)   3.And ...

  4. logback -- 配置详解 -- 二 -- <appender>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  5. 爬虫入门之urllib库详解(二)

    爬虫入门之urllib库详解(二) 1 urllib模块 urllib模块是一个运用于URL的包 urllib.request用于访问和读取URLS urllib.error包括了所有urllib.r ...

  6. [转]文件IO详解(二)---文件描述符(fd)和inode号的关系

    原文:https://www.cnblogs.com/frank-yxs/p/5925563.html 文件IO详解(二)---文件描述符(fd)和inode号的关系 ---------------- ...

  7. Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

    View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

  8. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  9. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

随机推荐

  1. leetcode:7. Reverse Integer

    这题简单,也花了我好长时间,我自己写的code比较麻烦,也没啥技巧:按正负性分类执行,先转化成字符串,用stringbuilder进行旋转,如果超出范围了就用try catch public int ...

  2. Struts2学习第三课 访问Web资源

    1.什么是WEB资源? HttpServletRequest,HttpSession,ServletContext等原生的Servlet API. 2.为什么访问WEB资源? B/S的应用的Contr ...

  3. Torando 入门

    1. 前言 Tornado 是使用 Python 编写的一个强大的.可拓展性的 Web 服务器/框架.与其他主流 Web 服务器框架有着明显区别:Tornado 支持异步非阻塞框架.同时它处理速度非常 ...

  4. CSS中position的absolute和relative用法

    static: HTML元素的默认定位方式 absolute: 将对象从文档流中拖出,使用left,right,top,bottom等属性进行绝对定位.而其层叠通过z-index属性定义.绝对定位的元 ...

  5. C#中的运算符和表达式

    说起C#运算符和表达式,小伙伴们肯定以为很简单,其实要用好表达式,不是一件容易的事.一个好的表达式可以让你做事半功倍的效果,比如三元表达式,可以让你少写N多个if和case语句. 表达式 由 操作数( ...

  6. Linux命令使用

    命令行创建设置用户密码 $ sudo useradd -m -r username $ cat "username:password" | sudo chpasswd -m 查询u ...

  7. The Little Prince

    Chapter 1 That is why, at the age of six, I gave up what might have been a magnificant career as a p ...

  8. 洛谷P2119 魔法阵

    P2119 魔法阵 题目描述 六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量. 大魔法师有m个魔法物品,编号分别为1,2,...,m.每个物品具有一个魔法值,我们用Xi表示编 ...

  9. 《H5+移动应用实战开发》已出版

    <H5+移动应用实战开发>终于出版了,最近在忙着Vue和Webpack相关的前端书籍写稿.本书面向的读者为:从后端转前端,或零基础开始学习移动端开发的人.前后端完全分离的开发方式越来越成为 ...

  10. 安装篇:MySQL系列之一

    环境:CentOS6.9系统安装MariaDB-10.2.15 一.yum包管理器安装MariaDB-server ​ 1)配置yum源(MariaDB官方源) [root@centos6 ~]# v ...