Я сделал систему чата, и я получил эту ошибку:операции кросс-нить не действует при использовании Invoke
Cross-thread operation not valid: 'MessageBox' etc.
То, что я сделал: я добавил Invoke. Вот код:
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 not ListBoxes, и он работает хорошо. Пожалуйста, вы можете написать код и посмотреть, как вы его реализуете? –
Здесь вы идете сэр: http://pastebin.com/tV4ZpQXv –