这两天在试着做自动升级程序,用到了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实现文件下载,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
C# WebClient 上传文件 WebClient上传文件至服务器
C# WEBClient 文件上传下载
下载开箱即用:C#使用WebClient获取网页源文件例子:该例子演示了通过WebClient获取百度首页源文件,并进行UTF8解码,存入一个字符串中。
C#下载文件 显示下载进度及速度 /// 开启界面刷新计时器 (不使用线程,防止阻塞造成界面刷新不及时) timer1.Enabled = true; try { WebRequest httpRequest = WebRequest.Create(tbFile.Text.Trim()); ...
四种C#文件下载方式,WriteFile分块下载,流方式下载,以字符流的形式下载文件,通知浏览器下载文件
本程序就主要是通过C# 中的WebClient 类实现对文件的下载功能,其中涉及到进度条,对下载成功与下载失败都会给出相应的提示,本程序是通过VS 2005 开发的,希望给需要在项目中用到下载这个功能的人有所帮助!...
该资源使用Webclient 类后台自动获取网络上指定的文件内容,下载过程中可以显示实时下载速度和进度,下载完成之后又提示信息。
C#下载ftp指定目录下所有文件。ftp地址、目录名、保存路径都写入了代码中,用户可根据需要自己修改即可。可下载目录下所有文件和文件夹。注解较少,我也是参照网上写的,本机运行正常。
使用WebClient类和FileStream类实现文件下载
WebClient下载文件展示进度条
本代码通过webclient下载,下载文件支持回调显示进度等。
C#的Winform开发的下载器,下载文件夹,带速度计算和文件下载计算。
采用winform开发的下载文件的功能,使用WebClient中的DownloadFile方法
通常在WinForm程序中都是采用WebClient方式实现文件上传功能,本身这个方式没有问题,但是当需要上传大文件比如说(300+M)的时候,那么WebClient将会报内存不足异常(Out of Memory Exceptions),究其原因是因为...
例如,当您从响应很慢的API服务器下载大文件时,您的应用程序的UI不会停止响应。HttpWebRequest通常和WebResponse一起使用,一个发送请求,一个获取数据。HttpWebRquest更为底层一些,能够对整个访问过程有个直观的...
C# asp.net http HttpWebRequest模拟浏览器请求下载文件到本地
使用WebClient实现文件下载,进度条反应下载进度。
C#.Net上传文件大小限制设置 文档中提供了两种方法,任何一种都可以。
C#HTTP方式下载,含断点续传,限制速度