public bool Decompress(string archivedFile, string unarchivedFile) { var fileInfo = new FileInfo(archivedFile); ReadChunkCount(fileInfo); new Thread(() => { ReadArchivedFile(fileInfo); }).Start(); var writeThread = new Thread(() => { WriteUnarchivedFile(unarchivedFile); }); writeThread.Start(); using (var pool = new CustomThreadPool(_threadAmount - 2)) { var res = true; while (res && _result) { pool.QueueTask(RunDecompressor); _decompressedCount++; if (_decompressedCount >= _fileChunkCount) { res = false; } } if (!_result) { pool.Abort(); } } writeThread.Join(); return(_result); }
public bool Compress(string fileToArchive, string archivedFile) { var fileInfo = new FileInfo(fileToArchive); _fileChunkCount = (int)Math.Ceiling((decimal)fileInfo.Length / _chunkSize); var writeThread = new Thread(() => { StartArchiveWriter(archivedFile); }); writeThread.Start(); using (var pool = new CustomThreadPool(_threadAmount - 1)) { /*pool.QueueTask(() => { StartArchiveWriter(archivedFile); });*/ var idx = 0; if (!_result) { pool.Abort(); } while (idx <= _fileChunkCount && _result) { Console.WriteLine("fileChunkCount: {0} chunkIndexWritten: {1}", _fileChunkCount, _chunkIndexWritten); pool.QueueTask(() => { ArchivedByChunk(fileInfo); }); idx++; } } writeThread.Join(); return(_result); }