/// <summary> /// 第5步:递归下载每个版本的所有文件 /// </summary> private void DownloadVersion() { List <FileMD5Node> fileList = new List <FileMD5Node>(); bool bIsCurVersion = false; int listLength = _downloadFilesList.Count; int startIndex = _downloadIndex; FileMD5Node fileNode; for (int i = startIndex; i < listLength; i++) { _downloadIndex = i; fileNode = _downloadFilesList[i]; if (fileNode._path == "version") //版本分割线 { if (bIsCurVersion) //当前版本的文件已过滤完成 { break; } bIsCurVersion = true; _sCurVersion = fileNode._md5; } else//要下载的文件 { fileList.Add(fileNode); } } if (bIsCurVersion == false)//按列表下载资源时,没有找到对应的版本号 { _versionType = VersionType.Error; _errorCode = ErrorCode.NotFoundVersion; return; } if (fileList.Count == 0)//当前版本的文件都无需下载的情况 { downloadVersionCallback(_sCurVersion); return; } _loadVersionFiles = new LoadFileList(fileList, _sCurVersion, _strDownloadUrl); _loadVersionFiles.EventFinished += new LoadFileList.LoadFinishedHandler(delegate(string sVersion, int loadFileCount) { _loadedCount = _loadedCount + loadFileCount;//已下载的总文件数 downloadVersionCallback(sVersion); }); _loadVersionFiles.EventError += new LoadFileList.LoadErrorHandler(delegate(ErrorCode errorCode) { _versionType = VersionType.Error; _errorCode = errorCode; return;//失败 }); }
// 下载完指定版本的所有文件时的回调 private void downloadVersionCallback(string sVersion) { _loadVersionFiles = null; int listLength = _downloadFilesList.Count; SaveLocalVersion(sVersion); if (_downloadIndex < listLength - 1) { DownloadVersion(); } else//已全部下载完成 { _versionType = VersionType.None; } }