• 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; }
        }

    效果图:

  • 相关阅读:
    OCP-1Z0-053-200题-54题-679
    OCP-1Z0-053-200题-55题-632
    OCP-1Z0-053-200题-78题-655
    底层框架PhoneGap
    用Dw CS6运行静态页面出问题
    JavaScript split()函数
    Java Web项目报错总结
    dojo报错总结
    FusionCharts中图的属性的总结归纳
    dojo表格的一些属性
  • 原文地址:https://www.cnblogs.com/ShyFrog/p/16254596.html
Copyright © 2020-2023  润新知