當我做了一個聊天系統,我得到這個錯誤:跨線程操作無效使用調用
Cross-thread operation not valid: 'MessageBox' etc.
我做了什麼:我已經添加了一個調用。這裏是代碼:
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;
}
感謝您的評論。它很高興地工作!唯一的事情是......它在每條消息後留下空白:/它只是抹去了其他評論。有什麼建議麼?再次感謝! - 理查德 –
我很高興幫助別人。我使用此代碼登錄TextBoxes而不是ListBoxes,並且它運行良好。請你能寫下代碼,讓我們看看你是如何實現它的? –
在這裏,你去先生:http://pastebin.com/tV4ZpQXv –