这两天在试着做自动升级程序,用到了WebClient

简单把我的过程讲讲

为了配合显示进度

先画个2个PrograssBar

一个命名为progbar_single一个为progbar_total

然后在写一个下载文件方法

private void doDownload(string fileName)
{lbl_singleFileName.Text = "正在下载:"+fileName;//label框提示下载文件progbar_single.Value=0;//初始化单个文件下载条WebClient ws = new WebClient();ws.DownloadProgressChanged += new DownloadProgressChangedEventHandler(OnDownloadProgressChanged);//绑定下载事件,以便于显示当前进度ws.DownloadFileCompleted += new AsyncCompletedEventHandler(OnDownloadFileCompleted);//绑定下载完成事件,以便于计算总进度ws.DownloadFileAsync(new Uri(upapp.UpdateURL + fileName), Path.Combine(AppDomain.CurrentDomain.BaseDirectory+"Temp", fileName)); //调用DownloadFileAsync方法下载文件//DownloadFileAsync有2个重载,另一个我没搞明白最后一个参数该传什么,有哪位朋友知道的,请留言告诉我谢谢//upapp是我一个实体类,UpdateURL存放了下载的地址(值为http://www.harde.com.cn/SoftUpdate/)//Path.Combine()是一个用来连接地址的方法,我将在另一日志中详细对其介绍}///
/// 下载进程变更事件
///
//////private void OnDownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{//在网上看到有朋友这么来控制进度条,我觉得麻烦,毕竟有省事的为什么我要麻烦一番……//this.SetProcessBar(e.ProgressPercentage, (int)((nDownloadedTotal + e.BytesReceived) * 100 / total));progbar_single.Value = e.ProgressPercentage;lbl_singleInfo.Text = "已下载" + e.BytesReceived + "字节/总计" + e.TotalBytesToReceive + "字节";//一个label框,用来显示当前下载的数据
} ///
/// 下载进程变更事件
///
//////private void OnDownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{MessageBox.Show("complied!");//计算总下载进度,因为我在服务端XML文件里可以得到文件大小,所以我直接用服务端数据,我回头再看看有没有什么好办法
}

下载文件部分到这里就可以结束了

不过为了方便,我使用了一个数组用来存放下载文件列表

这样就可以批量下载了,现在时单线程下载

大家可以运用上多线程同时下载多个文件。大家可以参考我的另一篇日志

另外,为了给与更好的用户体验,大家可以在显示下载的地方把字节转换成KB、MB(因为harde是用来做程序更新的,所以单个文件都不会很大,因此只替换到MB、大家有需要可以自己写个GB的)

if ((e.BytesReceived / 1024) > 1024)
{received = (e.BytesReceived / 1024) / 1024 + "MB";
}
else
{received = e.BytesReceived / 1024 + "KB";
}if (((e.TotalBytesToReceive / 1024) > 1024) && isCalculated)
{total = (e.TotalBytesToReceive / 1024) / 1024 + "MB";isCalculated = true;
}
else
{total = e.TotalBytesToReceive / 1024 + "KB";isCalculated = true;
}

同时把显示的地方更改下

lbl_singleInfo.Text = "已下载" + received + "/总计" + total;

C#下载文件:WebClient相关推荐

  1. Net WebClient 异步批量下载文件

    1.文件提前使用爬虫整理好,放到了demo文件夹下的1.txt文件中,文件格式如: http://www.banktunnel.eu/tumblr.com/tabea-lara.2_files/tum ...

  2. webclient下载文件 带进度条

    private void button1_Click(object sender, EventArgs e){doDownload(textBox1.Text.Trim());}private Dat ...

  3. 微软私有云分享(R2)8-PowerShell下载文件

    看过九叔之前博客的朋友应该会知道,在windows下通过命令行下载软件,使用"ftp"命令会比较方便.主要原因是windows下没有linux的命令"wget" ...

  4. Windows从web下载文件的几种方式

    最近搞app自动化测试,需要自动从网页上下载apk用于测试,顺便学习了几种从web下载文件的方式. 一.PowerShell DownloadFile 命令 PowerShell 是一种winodws ...

  5. C#异步批量下载文件

    实现原理:采用WebClient进行批量下载任务,简单的模拟迅雷下载效果! 废话不多说,先看掩饰效果: 具体实现步骤如下: 1.新建项目:WinBatchDownload 2.先建一个Windows窗 ...

  6. 使用 C# 下载文件的十八般武艺

    文件下载是一个软件开发中的常见需求.本文从最简单的下载方式开始步步递进,讲述了文件下载过程中的常见问题并给出了解决方案.并展示了如何使用多线程提升 HTTP 的下载速度以及调用 aria2 实现非 H ...

  7. Unity下载文件的方式小结

    1 UnityWebRequest下载 unity自带的下载方式,优点很明显:封装很好,使用简便,与unity使用兼容性很好且跨平台问题少:对应的缺点:扩展性差. 1.1 存在内存中供程序使用或者下载 ...

  8. unity 下载文件到存放本地

    一.下载图片存放本地文件夹 public void DownloadFile() {WebClient webClient = new WebClient();//将图片下载到文件夹webClient ...

  9. rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中

    学习rtthread,通过文章记录学习过程的一些问题. 手上有一块STM32F407VE的核心板(带sd卡槽,连接MCU的SDIO),和安信可的esp8266-12F模块,现以此为基础实现从网络上下载 ...

最新文章

  1. 函数嵌套函数传递this值
  2. HTML5API(2)
  3. 剑指offer 算法 (发散思维能力)
  4. http请求中get和post的区别以及其他请求方式
  5. Winform中实现ZedGraph中曲线右键显示为中文
  6. 用linq查询html中div个数,C#使用Linq to XML进行XPath查询
  7. socket,TCP/IP的理解(转)
  8. 01背包初始化的细节问题与循环下限的改进
  9. MVC4下配置log4net 五部曲
  10. 《大数据》杂志——大数据技术发展的十个前沿方向(中)
  11. 【Elasticsearch】Elasticsearch 索引 模板 template
  12. 层次狄利克雷过程HDP(Hierarchical Dirichlet Processes)
  13. HDU 2825 Wireless Password(AC自动机 + 状压DP)题解
  14. 在Django中使用F()函数
  15. 人人开源renren-fast前后端
  16. c226打印机驱动安装_打印机驱动安装失败怎么办 打印机驱动安装方法【步骤详解】...
  17. mysql 关键字 desc_mysql数据库表字段使用DESC等关键字报错及解决方法
  18. 华为云HMS Core 助力鸿蒙开发
  19. 打开苹果电脑浏览器的代码
  20. python 进程详解

热门文章

  1. 金杉号:40岁—55岁人的创业项目有哪些?
  2. H5 视频Video 元素及常用事件 播放 暂停 初始化 设置播放时间禁用下载等
  3. Android studio打包app(打包后app即可分享给其他人正常安装)
  4. 不想提孙杨,斗胆说下移民吧
  5. 企业微信私有部署服务器连接失败,企业微信-私有部署
  6. nginx的https安全认证CA
  7. Hust oj 1861 猥琐宅男——koko(DP)
  8. 2020高压电工考试及高压电工模拟考试题
  9. Spring Boot 统一功能处理(用户登录权限效验-拦截器、异常处理、数据格式返回)
  10. python 自动办公ppt_基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)