Beispiel #1
0
        /// <summary>
        /// This puts a message onto the queue to have handled.
        /// </summary>
        /// <param name="message"></param>
        public void Push(MessageObject message)
        {
            if (_guard.EnterExecute())
            {
                try
                {
                    bool doSchedule = false;
                    // push message on to queue
                    lock (_messageQueue)
                    {
                        _messageQueue.Enqueue(message);
                        if (_notProcessing)
                        {
                            _notProcessing = false;
                            doSchedule     = true;
                        }
                    }

                    if (doSchedule)
                    {
                        _currentMessageHandler = ProcessMessages;
                        _pool.AssignThread(_currentMessageHandler);
                    }
                }
                finally
                {
                    _guard.ExitExecute();
                }
            }
        }