Use something that keeps on listening. The Receive method on a MessageQueue will do that.
For example:
var mq = new System.Messaging.MessageQueue(@".\Private$\SomeQueue");
while (mq.CanRead)
{
var msg = mq.Receive();
}
The Receive method will block untill a message is received at which point it'll remove the message from the queue and return it.
HTH Christiaan