是的,这种方法非常正确,但在实现过程中确实遗漏了一些东西。
AddItemSafe
方法只是窗体子类中的一个方法,而不是
listMessage
(无论是哪种类型)。所以当你调用它时,你只需要指定方法名和参数,而不需要在另一个对象实例上调用它。
...
ASCIIEncoding aEncoding = new ASCIIEncoding();
string receivedMessage = aEncoding.GetString(receivedData);
//Adding this message into list box
//listMessage.Items.Add("Friend:" + receivedMessage);
// !!!!Note difference here:
AddItemSafe("Friend:" + receivedMessage);
...
然后,在AddItemSafe方法中,您可以完全像在单线程环境中一样执行操作,即添加到
列表消息
private void AddItemSafe(string text)
{
if (this.InvokeRequired)
{
AddItemSafeCallback a = new AddItemSafeCallback(AddItemSafe);
this.Invoke(a, new object[] { text });
}
else
{
// !!!!Note difference here:
listmessage.Items.Add(text);
}
}