将消息从类实例返回到表单的最佳方式
本文关键字:表单 最佳 方式 返回 消息 实例 | 更新日期: 2023-09-27 18:19:08
我想知道是否有人可以帮助我…
我正在使用MQ API,特别是"侦听"部分,我已经连接到队列,正在等待接收消息。
我使用一个Winforms应用程序,c# . net 3.5来使用这个API。
要使用这个API,我必须创建这样一个实例:
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):
namespace MQListener
{
class MessageQueue : MQ.MessageListener
{
public event EventHandler MsgTrigger;
public virtual void onMessage(MQ.Message Message)
{
MQ.TextMessage txtMessage = (MQ.TextMessage)Message;
String MsgBody = txtMessage.getMessage();
Console.WriteLine(MsgBody);
object objMsg = (object)MsgBody;
var _Trigger = MsgTrigger;
if(_Trigger != null)
_Trigger(objMsg, null);
}
}
}
如您所见,从MQ继承。MessageListener允许我重写onMessage()方法,该方法在每次从该队列接收消息时触发。
由于这在后台默默地发生,我不确定将消息文本返回到创建类实例的表单的最佳方法是什么,而不是将MsgBody输出到控制台。我从来没有调用过onMessage(),它被触发了,所以我不能返回一个值给表单。
更新
我添加了一个事件处理程序,将收到的消息传递回用户表单,其中PassMessage()方法将消息写入控制台。
奇怪的是,当我手动发送消息到onMessage从我的表单(不通过MQ)即下面,这似乎工作和处理程序触发passMessage()在我的表单。
myMQ.onMessage(Pass in a message);
但. .如果我发送一个真正的消息到队列,并等待我的MQ类中的onMessage()方法被触发并接收消息,它确实接收消息,但我的eventandler没有被触发。
有人知道为什么会发生这种情况吗?
任何想法?谢谢。
要发送消息到您的表单,您需要使用Invoke
方法管理您的消息在表单的头部使用,其他线程不能传递消息到表单。
我修改了你的代码:
public void passMessage(object s, EventArgs e)
{
txtMessage.Invoke(delegate()
{
txtMessage.Text = "";
});
}