0
我已經創建了自己的MSMQ包裝類是這樣的:C#MSMQ發送
public class MsgQueue
{
private MessageQueue messageQueue;
public delegate void ReadMessageDelegate(string message);
public event ReadMessageDelegate NewMessageAvailable;
public MsgQueue(string queueName)
{
var queuePath = @".\Private$\" + queueName;
if (!MessageQueue.Exists(queuePath)) MessageQueue.Create(queuePath);
messageQueue = new MessageQueue(queuePath);
messageQueue.Label = queueName;
messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string)});
messageQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MsgReceivedHandler);
messageQueue.BeginReceive();
}
private void MsgReceivedHandler(object sender, ReceiveCompletedEventArgs e)
{
try
{
MessageQueue mq = (MessageQueue)sender;
var message = mq.EndReceive(e.AsyncResult);
NewMessageAvailable(message.Body.ToString());
mq.BeginReceive();
}
catch (MessageQueueException)
{
// Handle sources of MessageQueueException.
}
return;
}
public void SendMessage(string message)
{
messageQueue.Send(message);
}
}
我測試了兩個獨立的WinForms應用程序。
首先應用發送按鈕被點擊時的文本消息:
private void btn_Click(object sender, EventArgs e)
{
var queue = new MsgQueue.MsgQueue("GBMqueue");
queue.SendMessage("some message text");
}
第二應用正在監聽任何傳入的消息,然後試圖處理它:
// declaration
private MsgQueue queue;
// preparation of the queue
private void Form1_Load(object sender, EventArgs e)
{
queue = new MsgQueue.MsgQueue("GBMqueue");
queue.NewMessageAvailable += Queue_NewMessageAvailable;
}
// Handler for the incoming messages
private void Queue_NewMessageAvailable(string message)
{
// Hits here very rarely!!!
}
的問題是,我可以幾次發送來自App1的消息,但Queue_NewMessageAvailable
處理程序只捕獲一個隨機消息,而不是第一個 - 只是其中一個發送的消息。
沒有拋出異常,它只是不捕獲傳入的消息。
我在這裏做錯了什麼?
我認爲第一個應用程序不應該聽新的消息。它有可能從第二個應用程序中刪除消息。它應該只發送消息。 – Sven
@Sven,當分成發件人和接收器,它肯定按預期工作:)感謝提示。 – pitersmx
很高興爲您效勞。我將發佈這個答案。 – Sven