В C # ответ кажется отрицательным - то, что вы делаете, является одним из единственных способов сделать это, и все остальные похожи.
Есть способы сделать это с помощью WMI или COM - взгляните на компонент MSMQManagement com. У этого есть свойство MessageCount.
Я нашел следующее сообщение, которое может дать вам некоторые другие идеи для немного лучших реализаций чистого C #:
Подсчет сообщений в MSMQ MessageQueue из C #
Хотя все вышесказанное кажется верным, я должен отметить, что Я никогда не пробовал делать это с помощью MSMQ - я когда-либо делал только стандартное чтение из очередей.