【发布时间】:2016-02-05 18:08:23
【问题描述】:
我做了一个聊天系统,我收到了这个错误:
跨线程操作无效:'MessageBox'等
我做了什么:我添加了一个调用。这是代码:
Invoke(new Action(() => messageBox.Items.Add(usersName.Text + ": " + receivedMessage)));
问题是,它基本上是从另一个用户那里发送一条空白的消息。这是因为我在本地连接到聊天。这是一张图片:
接收消息:
private void MessageCallBack(IAsyncResult aResult)
{
try
{
byte[] receivedData = new byte[1500];
receivedData = (byte[])aResult.AsyncState;
ASCIIEncoding aEncoding = new ASCIIEncoding();
string receivedMessage = aEncoding.GetString(receivedData);
Invoke(new Action(() => messageBox.Items.Add(usersName.Text + ": " + receivedMessage)));
buffer = new byte[1500];
socket.BeginReceiveFrom(buffer, 0, buffer.Length, SocketFlags.None, ref theirIp, new AsyncCallback(MessageCallBack), buffer);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
发送消息:
private void sendBtn_Click(object sender, EventArgs e)
{
try
{
if (messageTb.Text == "")
{
return;
}
else
{
ASCIIEncoding eEncoding = new ASCIIEncoding();
byte[] msg = new byte[1500];
msg = eEncoding.GetBytes(messageTb.Text);
socket.Send(msg);
messageBox.Items.Add(yourName.Text + ": " + messageTb.Text);
messageTb.Clear();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
this.ActiveControl = messageTb;
}
【问题讨论】:
标签: c# sockets invoke required