【发布时间】:2012-05-24 00:17:45
【问题描述】:
下面是我用于监听来自 Windows 窗体的消息的代码。
我注意到,当我点击 send 时,它会向 MyQueue 发送一条消息,但当时我希望事件 mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e) 应该被调用,但事实并非如此,换句话说,我正在尝试订阅 MyQueue从 Windows 窗体。只是想知道我是否在代码中遗漏了什么:
public class Form1 : System.Windows.Forms.Form
{
public System.Messaging.MessageQueue mq;
public static Int32 j=0;
public Form1()
{
// Required for Windows Form Designer support
InitializeComponent();
// Queue Creation
if(MessageQueue.Exists(@".\Private$\MyQueue"))
mq = new System.Messaging.MessageQueue(@".\Private$\MyQueue");
else
mq = MessageQueue.Create(@".\Private$\MyQueue");
mq.ReceiveCompleted += new ReceiveCompletedEventHandler(mq_ReceiveCompleted);
mq.BeginReceive();
}
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void btnMsg_Click(object sender, System.EventArgs e)
{
// SendMessage(Handle, 1, 0, IntPtr.Zero);
System.Messaging.Message mm = new System.Messaging.Message();
mm.Body = txtMsg.Text;
mm.Label = "Msg" + j.ToString();
j++;
mq.Send(mm);
}
void mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
{
//throw new NotImplementedException();
}
private void btnRcv_Click(object sender, System.EventArgs e)
{
System.Messaging.Message mes;
string m;
try
{
mes = mq.Receive(new TimeSpan(0, 0, 3));
mes.Formatter = new XmlMessageFormatter(new String[] {"System.String,mscorlib"});
m = mes.Body.ToString();
}
catch
{
m = "No Message";
}
MsgBox.Items.Add(m.ToString());
}
}
【问题讨论】:
-
您需要学习发布相关代码 - 而不仅仅是您的整个代码文件!将您的代码缩减为仅对问题非常重要的那些方法/行 - 不要发布所有 Windows 窗体生成的代码 - 这根本不会为您的帖子增加任何价值.....
标签: msmq