public static void UploadRecordFiles(Dictionary <string, string> recordConfigs, View.Progress progress, int startLine, int endLine) { var currentFileIndex = startLine / 16384; var offset = (startLine % 16384); var files = Directory.GetFiles(recordConfigs["Directory"], "*.HEX", SearchOption.AllDirectories); var currentLine = startLine; var fileList = new List <Dictionary <string, int> >(); var fileName = 0; while (currentLine < endLine) { fileList.Add(new Dictionary <string, int> { { "file", currentFileIndex }, { "offset", offset }, { "fileName", fileName } }); fileName++; offset = 0; currentLine += 16384; } _fileCount = (endLine - startLine) / 16384; _fileProcessed = 0; var fileNameList = new List <string>(); foreach (var uploadFile in fileList) { var file = new RecordFile { FileName = uploadFile["fileName"].ToString("D8"), Configs = recordConfigs }; fileNameList.Add(uploadFile["fileName"].ToString("D8")); using (var reader = new BinaryReader(new FileStream(files[uploadFile["fileName"]], FileMode.Open))) { file.FileDataBytes = new byte[(int)(reader.BaseStream.Length - uploadFile["offset"] * 16)]; reader.BaseStream.Seek(uploadFile["offset"] * 16, SeekOrigin.Begin); reader.Read(file.FileDataBytes, 0, (int)(reader.BaseStream.Length - uploadFile["offset"] * 16)); } var response = string.Empty; var tryTimes = 0; while (response != "255") { if (tryTimes > 10) { return; } response = new PostClient($"{ServerAddr}RecordFile").Post(JsonConvert.SerializeObject(file)); tryTimes++; } _fileProcessed++; progress.UpdateProgressBar((_fileProcessed / (_fileCount * 1.0)) * 100); } StartRecordProcess(recordConfigs, progress, fileNameList); }