怎么多线程下载文件,还有进度条,像idm一样

taoxichen 2020-08-09 04:44:36
我那个单线程用的是异步下载
部分代码:
public void DownloadFile(string urlAddress, string location)
{
using (webClient = new WebClient())
{
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);

try
{
Uri URL;
URL = new Uri(urlAddress);
sw.Start();
// 开始异步下载
webClient.DownloadFileAsync(URL, location);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}

怎么进行多线程下载呢
...全文
7244 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
平底锅锅锅 2020-08-17
  • 打赏
  • 举报
回复
把进度条放入窗体,根据实际进度或虚拟进度,模拟进度条0到100%效果。
  • 打赏
  • 举报
回复
需要取到文件总大小, 然后根据接收到的字节来判断下载进度
wanghui0380 2020-08-13
  • 打赏
  • 举报
回复
学会不用数据库,不用UI写代码。起码能做到这样才能算出师 线程安全list<下载封装> static slim下载控制信号量(5) //资源有限,正常情况,你也看到,大多数人会控制并行下载数量,通常并行数是5 class 下载封装 :InotifityProperychanged { object 下载进度 枚举状态:等待,下载中,下载完成 task 开始下载 } 具体代码我们也懒得写,逻辑实现难度不大,至于UI显示,有列表你可以绑定,有InotifityProperychanged 可以通知你有进度更新,有开始下载方法可以让你开始下载(当然什么暂停,继续这类我就不说啥了,照猫画虎而已)
github_36000833 2020-08-12
  • 打赏
  • 举报
回复
首先,要服务器支持分块下载,你才可能用多个下载线程来加速。 一般你可以先用HEAD方法发一个Http请求,看服务器是否支持。假设服务器返回: ... Accept-Ranges: bytes Content-Length: 146515 ... 说明该下载文件长度为146515个字节,而且服务器支持按字节(bytes)的分块。 这时,你就可以用多个线程来下载,每个线程请求不同的的分块,最后,把所有分块组装起来就完成了下载。比如 请求一可以是: GET 832-windows.exe HTTP/1.1 Range: bytes=0-1023 .. 请求二可以是: GET 832-windows.exe HTTP/1.1 Range: bytes=1024-2047 .. 等等 具体你还可以参考4楼X-i-n朋友提供的链接。
引用 4 楼 X-i-n 的回复:
https://mp.weixin.qq.com/s/MLMjJ7hW-Apr2JHyJ9CgZQ 多任务+多线程+断点续传的下载示例代码。 原理是通过Range这个RequestHeader向服务器请求指定片段的数据。
taoxichen 2020-08-12
  • 打赏
  • 举报
回复
附程序图片
taoxichen 2020-08-12
  • 打赏
  • 举报
回复
引用 5 楼 杀马特丶蛮牛 的回复:
你是要一个文件,多个线程下载,还是多个文件,多个线程下载?
一个文件,多线程下载,有什么办法吗
杀马特丶蛮牛 2020-08-10
  • 打赏
  • 举报
回复
你是要一个文件,多个线程下载,还是多个文件,多个线程下载?
King、乞丐 2020-08-10
  • 打赏
  • 举报
回复
封装成实体类 然后循环调方法
IT_study001 2020-08-10
  • 打赏
  • 举报
回复
跟帖 学习一下
zhangwei240 2020-08-10
  • 打赏
  • 举报
回复
wnloadFile(string urlAddress, string location) { using (webClient = new WebClient()) { webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed); webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged); try { Uri URL; URL = new Uri(urlAddress); sw.Start(); // 开始异步下载 webClient.DownloadFileAsync(URL, location);
X-i-n 2020-08-09
  • 打赏
  • 举报
回复
https://mp.weixin.qq.com/s/MLMjJ7hW-Apr2JHyJ9CgZQ 多任务+多线程+断点续传的下载示例代码。 原理是通过Range这个RequestHeader向服务器请求指定片段的数据。
八爻老骥 2020-08-09
  • 打赏
  • 举报
回复
异步就是多线程的一种实现啊,你是想把文件切成几块同时下载吗?那你研究一下什么是断点续传,然后new几个Thread去执行就行了。
wanghui0380 2020-08-09
  • 打赏
  • 举报
回复
多线程并不是一个很高级的技术,不必动则“多线程” 既然你 // 开始异步下载 webClient.DownloadFileAsync(URL, location); 这么写了。那么非要多线程才高级么?? for(i to 100) { DownloadFile(string urlAddress, string location) //难道不行??? }

110,502

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧