private void ProcessItems()
        {
            ExecutionEngine.EventLogger.Write("QueueProcessingThread:ProcessItems");
            try
            {
                while (IsCallerThreadAlive())
                {
                    while (!_isStopped)
                    {
                        IQueueItem currentItem = GetNextQueuedItem();

                        if (!_isStopped && currentItem != null && IsCallerThreadAlive())
                        {
                            currentItem.Process();
                        }
                        else
                        {
                            _isStopped = true;
                        }
                    }

                    _processStopped.Set();
                    _startGetting.WaitOne(WaitInterval, false);

                    ExecutionEngine.EventLogger.Write("QueueProcessingThread:ProcessItems:1");
                }
            }
            catch (Exception e)
            {
                ExecutionEngine.EventLogger.WriteExceptionInfo(e);
                throw;
            }

            ExecutionEngine.EventLogger.Write("QueueProcessingThread:ProcessItem:2");
        }