WPF文件下载帮助类
当我们在制作下载器时,需要知道下载进度以及文件大小,这时候我们需要对方法进行封装,界面方便看到效果
public class FileHelper { /// <summary> /// /// </summary> private WebRequest request = null; /// <summary> /// /// </summary> private WebResponse respone = null; /// <summary> /// /// </summary> public DownloadFileInfo fileInfo { get; private set; } /// <summary> /// 更变值委托 /// </summary> /// <param name="value"></param> public delegate void ValueHandler(long value,long maxValue); /// <summary> /// 下载完成委托 /// </summary> /// <param name="IsDownload"></param> public delegate void CompletedHandler(bool IsDownload); /// <summary> /// 值回调事件 /// </summary> public event ValueHandler OnValueChange; /// <summary> /// 下载完成事件 /// </summary> public event CompletedHandler OnCompleted; public FileHelper(DownloadFileInfo details) { fileInfo = details; } /// <summary> /// 文件下载 /// </summary> public void DownloadFile() { try { ////防呆//// if (fileInfo == null) throw new Exception($"{nameof(DownloadFileInfo)}不允许为空"); ////创建目标请求实例//// request = WebRequest.Create(fileInfo.RequestUriString); ////获取目标对象//// respone = request.GetResponse(); ThreadPool.QueueUserWorkItem((obj) => { Stream netStream = respone.GetResponseStream(); ////创建文件保存//// Stream fileStream = new FileStream($"{fileInfo.SaveFileUriString}", FileMode.Create); byte[] read = new byte[1024]; long progressBarValue = 0; int realReadLen = netStream.Read(read, 0, read.Length); while (realReadLen > 0) { fileStream.Write(read, 0, realReadLen); progressBarValue += realReadLen; if (OnValueChange != null) OnValueChange(progressBarValue, respone.ContentLength); realReadLen = netStream.Read(read, 0, read.Length); } ////关闭资源//// netStream.Close(); ////关闭资源//// fileStream.Close(); ////关闭回调//// if (OnCompleted != null) OnCompleted(true); }, null); } catch (Exception ex) { OnCompleted(false); throw ex; } } }
public class DownloadFileInfo { /// <summary> /// 请求地址 /// </summary> public string RequestUriString { get; set; } /// <summary> /// 保存地址(全路径,包括文件后缀名) /// </summary> public string SaveFileUriString { get; set; } }
效果图:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?