Ejemplo n.º 1
0
        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;
            }
        }