private void BackgroundThreadFunc()
        {
            while (!_backgroundThreadStop)
            {
                bool shouldSleep = true;
                lock (QueueLock)
                {
                    if (_packetQueue.Count != 0)
                    {
                        shouldSleep = false;
                    }
                }

                if (shouldSleep)
                {
                    System.Threading.Thread.Sleep(250);
                }
                else
                {
                    List <RawCapture> ourQueue;
                    lock (QueueLock)
                    {
                        ourQueue     = _packetQueue;
                        _packetQueue = new List <RawCapture>();
                    }
                    foreach (var packet in ourQueue)
                    {
                        // Здесь мы можем обрабатывать пакеты свободно, не занимая перехватываемое устройство
                        var packetWrapper = new PacketWrapper(_packetCount, packet);
                        packetStrings.Enqueue(packetWrapper);
                        _packetCount++;
                    }

                    _view.BeginInvoke(bs, packetStrings);
                    if (statisticsUiNeedsUpdate)
                    {
                        UpdateCaptureStatistics();
                        statisticsUiNeedsUpdate = false;
                    }
                }
            }
        }