从..函数填充列表框?

时间:2010-05-17 06:47:55

标签: c# .net

首先,我是C#的新手

我正在尝试在C#winforms应用程序中执行类似的操作

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

namespace MyApp
{
    public class MyListener : IMessageListener
    {
        public void MessageTransfer(IMessage m)
        {
            //do stuff with m
        }
    }
}

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

2 个答案:

答案 0 :(得分: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;
    }
}

在你的听众课程中:

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);
        }
    }
}

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

<强>更新
这是一个关于如何在表单中连接事件处理程序的示例。这段代码做了两个假设:

  • 事件MessageReceivedIMessageListener界面
  • 中定义
  • 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);
    }

}

答案 1 :(得分:1)

如果你的表单拥有监听器,最简单的方法是创建一个事件,监听器将为每个正在传输的消息上升。

  1. 将以下内容添加到您的侦听器类:

    public delegate void MessageHandler(IMessage m);
    public event MessageHandler MessageReceived;
    
  2. 将以下内容添加到MessageTransfer方法中:

        if (MessageReceived != null)
            MessageReceived(m);
    
  3. 现在,您可以在表单中为刚创建的事件附加方法:

  4. 初始化侦听器后,应在表单中放置以下行:

        _listener.MessageReceived += new MessageHandler(Form1_MessageReceived);
    

    我应该在表单中放置以下方法:

        void Form1_MessageReceived(IMessage m)
        {
            // add the message to the list
        }
    

    如果侦听器在不同的线程上运行,还有一件事需要做,那就是在窗体线程中调用另一个方法来修改列表。