Насколько я вижу из документации, вы должны проверить, есть ли сообщения в очереди сообщений, - использовать метод Peek. Затем вы полагаетесь на то, что он завершится с ошибкой MessageQueueException, чтобы сообщить вам, что очередь пуста.
public bool IsQueueEmpty()
{
bool isQueueEmpty = false;
MessageQueue myQueue = new MessageQueue(".\\myQueue");
try
{
myQueue.Peek(new TimeSpan(0));
isQueueEmpty = false;
}
catch(MessageQueueException e)
{
if (e.MessageQueueErrorCode ==
MessageQueueErrorCode.IOTimeout)
{
isQueueEmpty = true;
}
}
return isQueueEmpty;
}
Мне всегда говорили - и я испытывал - что исключения являются дорогостоящими и не должны использоваться для нормальной работы. Итак, мои вопросы:
Являются ли мои предположения о том, что использование перехвата MessageQueueException является дорогостоящей корректной операцией?
Есть ли способ синхронно проверить наличие сообщений в очереди, не полагаясь на исключения?
Я работаю с пространством имен System.Messaging в C #, но если мне понадобится неуправляемый, чтобы решить эту проблему, это может быть вариантом. И обратите внимание, что я хочу решение без использования WCF с MSMQ.