void m_parsingWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            // THREADING DANGER ZONE!
            UICulture.Initialize();

            var worker       = (BackgroundWorker)sender;
            var protocol     = m_currentProtocol;
            int turnOffTimes = 0;

            while (!worker.CancellationPending)
            {
                ViewerItem item = null;

                lock (m_parsingQueue)
                {
                    if (m_parsingQueue.Count > 0)
                    {
                        item = m_parsingQueue.Dequeue();
                    }
                }

                if (item == null)
                {
                    ++turnOffTimes;
                    if (turnOffTimes == 50)
                    {
                        return;
                    }

                    Thread.Sleep(100);
                    continue;
                }

                if (item.Viewer != this || item.Log != m_currentLog)
                {
                    continue;
                }

                var parser = item.Parser;
                if (parser == null)
                {
                    turnOffTimes = 0;
                    protocol.CreateParser(item);
                    parser = item.Parser;
                }

                if (!parser.IsParsed)
                {
                    turnOffTimes = 0;
                    parser.Parse();
                }
            }
        }