2025年6月7日 星期六 乙巳(蛇)年 三月十一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > .net

[c#]WebClient异步下载文件并显示进度

时间:10-30来源:作者:点击数:36

摘要

在项目开发中经常会用到下载文件,这里使用winform实现了一个带进度条的例子。

一个例子

  • using System;
  • using System.Collections.Generic;
  • using System.ComponentModel;
  • using System.Data;
  • using System.Drawing;
  • using System.IO;
  • using System.Linq;
  • using System.Net;
  • using System.Text;
  • using System.Threading.Tasks;
  • using System.Windows.Forms;
  • namespace Wolfy.DownLoad
  • {
  • public partial class MainFrm : Form
  • {
  • private string _saveDir;
  • public MainFrm()
  • {
  • InitializeComponent();
  • _saveDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "download");
  • }
  • private void MainFrm_Load(object sender, EventArgs e)
  • {
  • if (!Directory.Exists(_saveDir))
  • {
  • Directory.CreateDirectory(_saveDir);
  • }
  • }
  • private void btnDownLoad_Click(object sender, EventArgs e)
  • {
  • string imageUrl = "https://www.cdsy.xyz/d/file/computer/system/Windows/2023-10-30/44fa7e8300c21d33aae6bdecc9bced60.png";
  • string fileExt = Path.GetExtension(imageUrl);
  • string fileNewName = Guid.NewGuid() + fileExt;
  • bool isDownLoad = false;
  • string filePath = Path.Combine(_saveDir, fileNewName);
  • if (File.Exists(filePath))
  • {
  • isDownLoad = true;
  • }
  • var file = new FileMessage
  • {
  • FileName = fileNewName,
  • RelativeUrl = "d/file/computer/system/Windows/2023-10-30/44fa7e8300c21d33aae6bdecc9bced60.png",
  • Url = imageUrl,
  • IsDownLoad = isDownLoad,
  • SavePath = filePath
  • };
  • if (!file.IsDownLoad)
  • {
  • string fileDirPath = Path.GetDirectoryName(file.SavePath);
  • if (!Directory.Exists(fileDirPath))
  • {
  • Directory.CreateDirectory(fileDirPath);
  • }
  • try
  • {
  • WebClient client = new WebClient();
  • client.DownloadFileCompleted += client_DownloadFileCompleted;
  • client.DownloadProgressChanged += client_DownloadProgressChanged;
  • client.DownloadFileAsync(new Uri(file.Url), file.SavePath, file.FileName);
  • }
  • catch
  • {
  • }
  • }
  • }
  • void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
  • {
  • if (e.UserState != null)
  • {
  • this.lblMessage.Text = e.UserState.ToString() + ",下载完成";
  • }
  • }
  • void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
  • {
  • this.proBarDownLoad.Minimum = 0;
  • this.proBarDownLoad.Maximum = (int)e.TotalBytesToReceive;
  • this.proBarDownLoad.Value = (int)e.BytesReceived;
  • this.lblPercent.Text = e.ProgressPercentage + "%";
  • }
  • }
  • }

测试

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门