private static bool WaitForMessage(TCubeDCServo cube, int messageTypeID, int requiredMessageID) { while (true) { ushort messageType; ushort messageID; uint messageData; // if no messages waiting if (cube.MessageQueueSize() == 0) { // reset wait for message event and wait for a message _event.Reset(); _event.WaitOne(); } // get the message cube.GetNextMessage(out messageType, out messageID, out messageData); // if message is correct if ((messageType == messageTypeID) && (messageID == requiredMessageID)) { return(true); } if (cube.HasLastMsgTimerOverrun()) { Int64 lastMsg; cube.TimeSinceLastMsgReceived(out lastMsg); Console.WriteLine("device not responded, lastMsg {0}", lastMsg); cube.Close(); Console.ReadKey(); return(false); } } }