从..函数填充列表框?

And*_*i S 3 .net c#

首先,我是C#的新手

我想在C#winforms应用程序中做这样的事情

当我的应用程序启动时,表单在系统托盘中最小化.当我双击它时,它会打开并向qpid代理发送一些请求以获取一些信息.然后发回一条消息,并在我的应用程序中的监听器中收到(我不确定代码是否相关,但无论如何我都会发布)

namespace MyApp
{
    public class MyListener : IMessageListener
    {
        public void MessageTransfer(IMessage m)
        {
            //do stuff with m
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试做的是使用该函数中收到的消息填充该表单中的列表框,但我不知道如何从MessageTransfer函数与该特定表单进行通信

Fre*_*örk 5

我建议你的听众不知道如何呈现消息.相反,公开表单可以侦听的事件:

// event args class for transmitting the message in the event
public class MessageEventArgs : EventArgs
{
    public IMessage Message { get; private set; }

    public MessageEventArgs(IMessage message)
    {
        Message = message;
    }
}
Run Code Online (Sandbox Code Playgroud)

在你的监听器类中:

public class MyListener : IMessageListener
{
    public event EventHandler<MessageEventArgs> MessageReceived;

    public void MessageTransfer(IMessage m)
    {
        OnMessageReceived(new MessageEventArgs(m));
    }

    protected void OnMessageReceived(MessageEventArgs e)
    {
        EventHandler<MessageEventArgs> temp = MessageReceived;
        if (temp != null)
        {
            temp(this, e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在表单中添加事件侦听器,并将消息信息添加到列表框或您喜欢的任何其他类型的控件中.

更新
以下是如何在表单中连接事件处理程序的示例.这段代码做了两个假设:

  • 该事件MessageReceived在IMessageListener界面中定义
  • 该IMessage接口有一个名为的属性Text.

代码示例:

public partial class MainUI : Form
{
    private IMessageListener _messageListener;

    public MainUI()
    {
        InitializeComponent();
        _messageListener = new MyListener();
        _messageListener.MessageReceived += MessageListener_MessageReceived;
    }

    void MessageListener_MessageReceived(object sender, MessageEventArgs e)
    {
        _messageListBox.Items.Add(e.Message.Text);
    }

}
Run Code Online (Sandbox Code Playgroud)