RobotStudio event

RAPID Message Queue with PC SDK

 I am getting error "A RMQ message was discarded in task T_ROB1. RMQ_T_ROB1 received a RMQ message that couldn't be handled."
What Exactly I am doing wrong here ?

 public class Test
    {
        IpcQueue myQueue;
        private IpcQueue tRob1Queue;

        private IpcMessage sendMessage;
        private IpcMessage recMessage;
        public Test()
        {


            // _Camera.AprilTagCordinatesChanged += DMDecoder_CordinatesChanged;
        }

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [MTAThread]
        public void start()
        {
            NetworkScanner scanner = new NetworkScanner();
            scanner.Scan();
            System.Threading.Thread.Sleep(2000);
            scanner.Scan();
            var ControllerInfos = scanner.Controllers;
            var ctrl = Controller.Connect(ControllerInfos[0], ConnectionType.Standalone);
            ctrl.Logon(UserInfo.DefaultUser);
            Console.WriteLine("Controller-System: {0} time is: {1} System ID is: {2}", ctrl.SystemName, ctrl.DateTime, ctrl.SystemId);
            Console.WriteLine("Press any key to terminate");

            // Get the T_ROB1 queue to send messages to the RAPID task
            tRob1Queue = ctrl.Ipc.GetQueue("RMQ_T_ROB1");

            // Create my own PC SDK queue to receive messages
            if (!ctrl.Ipc.Exists("PC_SDK_Q"))
            {
                myQueue = ctrl.Ipc.CreateQueue("PC_SDK_Q", 5, Ipc.IPC_MAXMSGSIZE);
            }
            myQueue = ctrl.Ipc.GetQueue("PC_SDK_Q");
            ctrl.EventLog.MessageWritten += EventLogMessageWritten;
            recMessage = new IpcMessage();
            sendMessage = new IpcMessage();
           
            SendMsgToRapid();
            
        }

        static Controller CreateController()
        {
            try
            {
                Guid test = new Guid();
                NetworkScanner scanner = new NetworkScanner();
                Controller controller = new Controller(ControllerFactory.FormatControllerId(new Guid()));
                return controller;
            }
            catch (Exception ex)
            {
                Console.WriteLine("The specified GUID cannot be found. The robot GUID can be found in the internal directory in the 'system.guid' file. The current sysID is: " );
                Console.WriteLine("Press any key to terminate");
                Console.ReadKey();
                Environment.Exit(1);
            }
            return null;
        }

        private void SendMsgToRapid()
        {
            Thread.Sleep(5000);
            try
            {
                while (true)
                {
                    SendMessage(true);

                  
                    CheckReturnMsg();
                   
                    Thread.Sleep(10000); // Send every 10 seconds
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{ex.Message}");
                throw ex; // Rethrow to notify caller
            }
        }

        public void SendMessage(bool boolMsg)
        {

            byte[] data = null;

            // Create message data
            if (boolMsg)
            {
                data = new UTF8Encoding().GetBytes("bool;TRUE");
            }
            else
            {
                data = new UTF8Encoding().GetBytes("bool;FALSE");
            }

            // Place data and sender information in message
            sendMessage.SetData(data);
            sendMessage.Sender = myQueue.QueueId;

            // Send message to the RAPID queue
            tRob1Queue.Send(sendMessage);
        }

        private void CheckReturnMsg()
        {
            Thread.Sleep(5000);

            IpcReturnType ret = IpcReturnType.Timeout;
            string answer = string.Empty;
            int timeout = 5000; // 5 seconds timeout

            // Check for a message in the PC SDK queue
            ret = myQueue.Receive(timeout, recMessage);
            if (ret == IpcReturnType.OK)
            {
                // Convert message data to string
                answer = new UTF8Encoding().GetString(recMessage.Data);
                Console.WriteLine(answer); // Should show: "Acknowledged"
            }
            else
            {
                Console.WriteLine(answer);
            }
        }

        public static void EventLogMessageWritten(object sender, MessageWrittenEventArgs e)
        {
            if (sender != null && e != null)
            {
                Console.WriteLine(e.Message.Title);
                // Additional code for event logging could be placed here
            }
            else
            {
                Console.WriteLine("Null Event Log Message");
            }
        }
    }
}
###Rapid code
MODULE RAB_COMMUNICATION
    VAR bool flag := FALSE;
    VAR intnum connectnum;
    PROC main()
        CONNECT connectnum WITH RABMsgs;
        IRMQMessage flag, connectnum;
        WHILE flag = FALSE DO
            !do something, eg. normal processing...
            WaitTime 3;
        ENDWHILE
        !PC SDK message received - do something...
        TPWrite "Message from PC SDK, will now...";
        IDelete connectnum;
        EXIT;
    ENDPROC
    TRAP RABMsgs
        VAR rmqmessage msg;
        VAR rmqheader header;
        VAR rmqslot rabclient;
        VAR num userdef;
        VAR string ack := "Acknowledged";
        RMQGetMessage msg;
        RMQGetMsgHeader msg \Header:=header
            \SenderId:=rabclient\UserDef:=userdef;
        !check data type and assign value to flag variable
        IF header.datatype = "bool" THEN
            RMQGetMsgData msg, flag;
            !return receipt to sender
            RMQSendMessage rabclient, ack;
        ELSE
            TPWrite "Unknown data received in RABMsgs...";
        ENDIF
    ENDTRAP
ENDMODULE