private void EnqueueMessage(IKdmMessage message)
 {
     lock (this)
     {
         this.messageQueue.Enqueue(message);
     }
 }
        private void ListenMessageQueue()
        {
            Log.Info("KDM Device protocol message queue listener thread is started");
            this.threadsStarted = true;

            while (this.working)
            {
                var message = this.DequeueMessage();
                if (message != null)
                {
                    this.OnProcessMessage = message;
                    this.SendMessageOperationCode();

                    while (!message.IsMessageProcessingCompleted)
                    {
                        Thread.Sleep(1); // Wait for the message to be processed
                    }
                }
                else
                {
                    // If there is no message, sleep for a while
                    Thread.Sleep(10);
                }
            }

            Log.Info("KDM Device protocol message queue listener thread is disposed");
            this.IsStopped = true;
        }