Я создаю приложение чата, в котором несколько пользователей могут вводить свои сообщения и отправлять их на сервер через tcp (сетевой поток).
У меня есть следующий код для получения сообщений:
private void ReceiveData()
{
Task.Run(() =>
{
int bufferSize = 1024;
string message = "";
byte[] buffer = new byte[bufferSize];
_NetworkStream = _TcpClient.GetStream();
AddMessage("Connected!");
while (true)
{
int readBytes = _NetworkStream.Read(buffer, 0, bufferSize);
message = Encoding.ASCII.GetString(buffer, 0, readBytes);
Console.WriteLine("I received a message: " + message);
if (message.Equals("bye"))
{
break;
}
AddMessage(message);
}
buffer = Encoding.ASCII.GetBytes("bye");
_NetworkStream.Write(buffer, 0, buffer.Length);
_NetworkStream.Close();
_TcpClient.Close();
AddMessage("Connection closed!");
});
}
Теперь, когда я вызываю AddMessage (который я вызываю из другого потока, то есть из другого контекста), мое приложение вылетает.Что вполне логично, учитывая мой код AddMessage:
private void AddMessage(string message)
{
this.ListBox_Messages.Items.Add(message);
}
Мой вопрос заключается в том, является ли функция addmessage ответственной за выполнение этого в потоке пользовательского интерфейса или в функции вызывающей стороны, в данном случае ReceiveData () и что будетлучший и самый современный способ его реализации?
Заранее спасибо!