桌面工具里下载并显示进度是很常见的需求。WebClient 的 DownloadFileAsync 配合事件就能拿到实时百分比,虽然新项目更推荐 HttpClient,但在老框架工具与 WinForms 场景中仍是零依赖的最简方案。
实现思路
订阅 DownloadProgressChanged 读取 e.ProgressPercentage 刷新进度;DownloadFileCompleted 里判断是否出错并提示结果;异步下载不阻塞界面线程,配合进度条控件可直接绑定。
完整代码
using System;
using System.Net;
class Program
{
static void Main()
{
using (var client = new WebClient())
{
client.DownloadProgressChanged += (s, e) =>
{
Console.Write("下载进度:" + e.ProgressPercentage + "% ");
Console.SetCursorPosition(0, Console.CursorTop);
};
client.DownloadFileCompleted += (s, e) =>
{
Console.WriteLine();
if (e.Error == null)
Console.WriteLine("下载完成");
else
Console.WriteLine("下载失败:" + e.Error.Message);
};
client.DownloadFileAsync(
new Uri("https://example.com/setup.zip"),
"D:/setup.zip");
}
Console.ReadLine();
}
}使用要点
- WinForms 中把百分比直接赋给 ProgressBar.Value 即可实现进度条;
- 需要取消下载时调用 CancelAsync,注意完成后及时释放对象避免句柄泄漏;
- 需要断点续传、HTTP/2 或更细粒度控制时请改用 HttpClient。
小结
WebClient 把下载与进度封装得足够简单,适合工具类程序的快速开发;对网络稳定性要求高的场景再迁移到 HttpClient 加流式读取也不迟。
评论(0)
暂无评论,快来抢沙发吧~