public async Task DownloadDirectory( string remotedirectory, Func <string, IFileStream> onCreateFileStream, Action <string> onCreateDicectroy) { reset: this._filesQueue.Clear(); TransferTaskFlage = TransferTaskFlage.Allow; var result = await this.AwaitGetDirectoryFiles(remotedirectory); if (!result) { var isReset = await this.AwaitResetDownloadDirectory(); if (isReset) { goto reset; } else { return; } } while (true) { if (_filesQueue.Count <= 0) { break;//文件夹所有文件传输完成 } if (TransferTaskFlage == TransferTaskFlage.Abort) { break;//停止任务 } var file = _filesQueue.Dequeue(); if (file.Type == DirectoryFileType.File) { var targetFileName = file.FileName; var localFileName = file.FileName.Substring(remotedirectory.LastIndexOf("\\") + 1); var fileStream = onCreateFileStream?.Invoke(localFileName); if (fileStream.IsNull()) { continue; } if (_transferMode == TransferMode.Cancel || TransferTaskFlage == TransferTaskFlage.Abort) { break; } await this.DownloadFile(fileStream, targetFileName); } else { var directory = file.FileName.Substring(remotedirectory.LastIndexOf("\\") + 1); onCreateDicectroy?.Invoke(directory); } } this._filesQueue.Clear(); }
/// <summary> /// 停止所有的传输任务 /// </summary> public void StopTransferTask() { this.TransferTaskFlage = TransferTaskFlage.Abort; }