/// <summary> /// 创建一个 下载节点; /// </summary> /// <param name="exData">追加内容,对应类型解;</param> public DownLoadPack(string strUrl, DownLoadAssetInfo downLoadInfo, DownLoadAssetType assetType, DownLoadCallBack funCallBack, object exData, bool debugError) { m_DownLoadAssetInfo = downLoadInfo; m_AssetType = assetType; m_CallBack = funCallBack; m_exData = exData; m_strUrl = strUrl; m_AssetRefer = 1; m_DebugError = debugError; }
/// <summary> /// 下载文件 /// </summary> /// <param name="url">下载地址</param> /// <param name="localPath">本地地址</param> /// <param name="complite">完成回调</param> public void downLoadFile(String url, String localPath, DownLoadCallBack complite) { new Thread(new ThreadStart(() => { try { WebClient client = new WebClient(); client.DownloadFile(url, localPath); if (File.Exists(localPath)) { complite(true); } else { complite(false); } } catch { complite(false); } })).Start(); }
/// <summary> /// 下载文件 进度显示 /// </summary> /// <param name="URL">下载地址</param> /// <param name="filename">下载路径</param> /// <param name="progress">下载进度</param> /// <param name="callBack">完成回调</param> public void DownloadFile(string URL, string filename, DownloadProgress progress, DownLoadCallBack callBack) { float percent = 0; Console.WriteLine(URL); try { lock (dowloadLock) { if (downloadUrls.Contains(URL)) { return; } downloadUrls.Add(URL); } System.Net.HttpWebRequest Myrq = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(URL); System.Net.HttpWebResponse myrp = (System.Net.HttpWebResponse)Myrq.GetResponse(); long totalBytes = myrp.ContentLength; System.IO.Stream st = myrp.GetResponseStream(); System.IO.Stream so = new System.IO.FileStream(filename, System.IO.FileMode.Create); long totalDownloadedByte = 0; byte[] by = new byte[1024]; int osize = st.Read(by, 0, (int)by.Length); var date = DateTime.Now; GC.AddMemoryPressure(totalBytes); while (osize > 0) { totalDownloadedByte = osize + totalDownloadedByte; System.Windows.Forms.Application.DoEvents(); so.Write(by, 0, osize); osize = st.Read(by, 0, (int)by.Length); var sp = DateTime.Now - date; date = DateTime.Now; if (sp.Seconds > 1) { percent = (float)totalDownloadedByte / (float)totalBytes * 100; if (progress != null) { Console.WriteLine(percent + "=================================" + filename); progress(percent); } } } so.Close(); st.Close(); if (callBack != null) { callBack(true); } lock (dowloadLock) { downloadUrls.Remove(URL); } } catch { callBack(false); lock (dowloadLock) { downloadUrls.Remove(URL); } } }