1. 程式人生 > 其它 >WPF檔案下載幫助類

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

效果圖: