public virtual void Launch(object evnt) { try { _threadNumber = ++_threadCount; ManualResetEvent doneEvent = (ManualResetEvent)evnt; while (true && !_cancelled) { doneEvent.WaitOne(); ByteBlock _block = _queueReader.Dequeue(); if (_block == null) { doneEvent.Set(); return; } using (MemoryStream _memoryStream = new MemoryStream()) { using (GZipStream cs = new GZipStream(_memoryStream, CompressionMode.Compress)) { cs.Write(_block.Buffer, 0, _block.Buffer.Length); } byte[] compressedData = _memoryStream.ToArray(); ByteBlock _out = new ByteBlock(_block.ID, compressedData); _queueWriter.EnqueueForWriting(_out); } } } catch (Exception ex) { Console.WriteLine("Ошибка в потоке {0}. \n Описание ошибки: {1}", _threadNumber, ex.Message); _cancelled = true; } }