I'm trying to make simple tcp server with gui but I'm having an error Cross-thread operation not valid: listview1 access from thread other the thread it was created in.
Here is my code
private void Form1_Load(object sender, EventArgs e)
{
try
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(new IPEndPoint(IPAddress.Any, 3000));
serverSocket.Listen(0);
Thread clientThread = new Thread(clientListener);
clientThread.Start();
}
catch (SocketException)
{
}
}
private void clientListener()
{
while (true)
{
socket += 1;
clientSocket[socket] = serverSocket.Accept();
sendMessage(socket, "info");
}
}
private void sendMessage(int clientID, string msg)
{
byte[] sdata = Encoding.ASCII.GetBytes(msg);
clientSocket[clientID].Send(sdata, 0, sdata.Length, 0);
byte[] buffer = new byte[1028];
int rec = clientSocket[clientID].Receive(buffer, 0, buffer.Length, 0);
Array.Resize(ref buffer, rec);
updateUI(Encoding.ASCII.GetString(buffer));
}
private void updateUI(string data)
{
string[] separator = new string[] { "[1.2.3.4]" };
string[] trimData = data.Split(separator, StringSplitOptions.None);
ListViewItem lvi = listView1.Items.Add("test id");
lvi.SubItems.Add(trimData[0]);
lvi.SubItems.Add(trimData[1]);
lvi.SubItems.Add(trimData[2]);
}
my server is working fine in console but when i try to make in windows form i start having this error. hope someone can help me.