C# 创建N个线程同时批量下载文件
前言
批量下载文件时使用多线程可以有效缩短完成时间,本文将讲解如何使用C#+CodePlus扩展库快速完成多线程的文件下载。
MTDownloader - C#多线程下载文件
源码
大部分代码由IDE自动生成,需要我们自己编写的代码正好10行。也就是说,只需要10分钟,就可以手撸一个多线程的批量下载器。
using STTech.CodePlus.Threading;
using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Windows.Forms;
namespace Test.MTDownloader.Desktop
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void btnDownload_Click(object sender, EventArgs e)
{
// 创建下载目录(如果不存在)
Directory.CreateDirectory(tbSavePath.Text);
// 获取所有下载链接
var urlArray = tbUrl.Lines;
// 从界面控件获取线程数
var threadCount = (int)mudThreadCount.Value;
// 将所有下载链接按照线程数均分成多组链接
var downloadGroup = urlArray.Balance(threadCount);
// 使用多线程执行下载任务
TaskExtension.Run(downloadGroup, threadCount, DownloadHandler);
// 提示下载完成
MessageBox.Show("OK.");
}
/// <summary>
/// 每个组的链接下载处理过程
/// </summary>
/// <param name="urlGroup"></param>
private void DownloadHandler(IEnumerable<string> urlGroup)
{
// 创建WebClient
WebClient client = new WebClient();
// 遍历Url
foreach(string url in urlGroup)
{
// 从链接中获取文件名
var fileName = Path.GetFileName(url);
// 下载文件到指定目录
client.DownloadFile(url, Path.Combine(tbSavePath.Text, fileName));
}
}
}
}
依赖库
如此简单完成多线程相关的开发是因为引用的CodePlus提供的扩展方法。
对着项目右键,选择管理NuGet程序包
在搜索栏中输入CodePlus,选择图中的程序包后,选择最新版本安装即可。