0

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.

Dmitry
  • 13,797
  • 6
  • 32
  • 48
markBlank
  • 11
  • 1
  • 1

0 Answers0