(I should just give up on this, I assume that you are doing this for training, not a bulletproof implementation. If you want something that only works, then you better not use the existing implementation).
Just some general comments. In the example below, the third line is not needed.
Queue<PQMessage> dataList = messageDictionary[item.MsgPriority];
dataList.Enqueue(item);
messageDictionary[item.MsgPriority] = dataList;
dataList, messageDictionary, . , Enqueue , , ( ), , .
dequeue , (, - ). , LINQ, First ? ( Peek).
, , PQMessage , , SortedList ? (. )