我建議您的偵聽器不知道如何呈現消息。相反,暴露的形式可以聽一個事件:
// 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);
}
}
}
現在你可以在你的表單中添加一個事件偵聽器和消息信息添加到列表框或你喜歡的任何其他類型的控制。
更新
這是一個關於如何在窗體中連接事件處理程序的示例。此代碼兩個假設:
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);
}
}
thanx爲快速回復! 這可能聽起來很愚蠢..但是如何(以及在什麼情況下)在表單中添加事件偵聽器? (我的猜測是,我有編輯Form1.Designer.cs,並在Form1部分添加類似 this.onMessageReceived + =新System.EventHandler(this.Form1_DoStuffWithMessage) – 2010-05-17 08:00:31
@andrew:見例如更新的答案。 – 2010-05-17 08:10:54
謝謝,這有幫助,幾乎沒有伎倆,但我現在有另一個問題: 每當MessageListener_MessageReceived函數被調用我得到一個「System.InvalidOperationException:跨線程操作無效:控制'ticketList'從一個線程訪問而不是它創建的線程。「,ticketList是我的列表框 – 2010-05-17 13:37:56