C# 从类实例将消息返回表单的最佳方法?
我想知道是否有人能帮我 我正在使用一个mqapi,特别是“监听”部分,在这里我连接到一个队列,等待接收消息 我使用Winforms应用程序C#.NET 3.5来处理此API 要使用API,我必须创建如下实例:C# 从类实例将消息返回表单的最佳方法?,c#,.net,winforms,class,message-queue,C#,.net,Winforms,Class,Message Queue,我想知道是否有人能帮我 我正在使用一个mqapi,特别是“监听”部分,在这里我连接到一个队列,等待接收消息 我使用Winforms应用程序C#.NET 3.5来处理此API 要使用API,我必须创建如下实例: private void btnConnect(object sender, EventArgs e) { MessageQueue myMQ = new MessageQueue(); myMQ.Connect(...); //Register handler
private void btnConnect(object sender, EventArgs e)
{
MessageQueue myMQ = new MessageQueue();
myMQ.Connect(...);
//Register handler
myMQ.MsgTrigger += new EventHandler(passMessage);
}
public void passMessage(object s, EventArgs e)
{
Console.WriteLine(s.ToString()); //Not sure if this is a good way to pass back a value
}
它实现类(该类又从MessageListener继承):
如您所见,从MQ.MessageListener继承允许我重写onMessage()方法,而每当在该队列上收到消息时,就会触发该方法
由于这种情况在后台悄无声息地发生,我不确定将消息文本返回到创建类实例的表单的最佳方法是什么,而不是将MsgBody输出到控制台。我从不调用onMessage(),它是被触发的,因此我无法将值返回到表单
更新
我添加了一个eventhandler,将接收到的消息传递回用户表单,方法PassMessage()将消息写到控制台
奇怪的是,当我从我的表单(而不是通过下面的MQ)手动向onMessage发送消息时,这似乎起作用了,处理程序会在我的表单上触发passMessage()
myMQ.onMessage(Pass in a message);
但是。。如果我向队列发送一条真实消息,并等待MQ类中的onMessage()方法被触发并接收该消息,它确实会接收该消息,但我的eventhandler不会被触发
有人知道为什么会这样吗
有什么想法吗?谢谢。要向表单发送消息,您需要使用
调用
方法管理要在表单中使用的消息,其他线程无法向表单传递消息
我更改了有关如何执行此操作的代码:
public void passMessage(object s, EventArgs e)
{
txtMessage.Invoke(delegate()
{
txtMessage.Text = "";
});
}
查看EventsUp将您自己的事件添加到MessageQueue类,并在onMessage处理程序中提升它。然后将事件处理程序添加到表单中新创建的事件中。哦,顺便问一下,你上了什么课?我现在正在使用MQ,这对我很有帮助。我在
System.Messaging
中找不到MessageListener
。您使用的是哪种API?大家好,这是我们购买的MQ平台,但它没有太多的.NET兼容性。我已经更新了我的代码,以显示我根据建议添加的EventHandler(感谢您的建议),但事件似乎从未触发?有人能看出我做错了什么吗?如何通过处理程序将消息文本传递回表单?谢谢消息处理人员为什么应该知道表单?我同意这将为OP提供在表单上输出文本的能力,但我认为事件将是一个更好的选择,不是吗?将显示消息的行为与接收消息的行为分离。您好,谢谢您的建议。我更愿意通过eventhandler将消息传递回我的表单,而不是让类知道我的表单。再次感谢。真的,我在征求关于将收到的消息传递回表单的最佳方式的建议,而不必让全班直接知道表单的存在:)
public void passMessage(object s, EventArgs e)
{
txtMessage.Invoke(delegate()
{
txtMessage.Text = "";
});
}