1. For receive, the above code perform receive synchronously. Thus, it will suspend the thread and only return when a queue message is received

2. Programming with MSMQ become tough and waste a lot of time if you did not read the API correctly. For example, MessageQueue.Exist(). This method only work for local queue. It will fail on all remote/Direct FormatName where machine in Workgroup mode. Please read http://msdn.microsoft.com/en-us/library/system.messaging.messagequeue_methods.aspx carefully.