Как обновить Lablel из не главного потока? C#

Рейтинг: 0Ответов: 0Опубликовано: 10.01.2023

Пишу простую программу для поднятия tcp сервера. И если не выводить сервер в отдельный поток то программа виснет в 0.

Я реализовал систему логов, и хочу выводить данные, дабы юзер не думал о том что все сломалось и не работает.

Код потока:

public static void Server(string Ip, int Port, string input_target)
    {
        try
        {
            int server_port = System.Convert.ToInt32(Port);
            IPAddress localAddr = IPAddress.Parse(Ip);
            TcpListener server = new TcpListener(localAddr, server_port);
            server.Start();
            logs_box.Text = logs_box.Text + "Сервер успешно запущен!\r\n";

            while (true)
            {
                TcpClient client = server.AcceptTcpClient();
                NetworkStream ns = client.GetStream();
                logs_box.Text = logs_box.Text + "К серверу подключился: " + client + "\r\n";
                byte[] target = new byte[100];
                target = Encoding.Default.GetBytes(input_target);
                logs_box.Text = logs_box.Text + "Сервер отправил клиенту: " + input_target + "\r\n";

                ns.Write(target, 0, target.Length);

                while (client.Connected)
                {
                    byte[] msg = new byte[1024];
                    int count = ns.Read(msg, 0, msg.Length);
                    logs_box.Text = logs_box.Text + "Клиент прислал: " + Encoding.Default.GetString(msg, 0, count) + "\r\n";
                }
            }
        }
        catch (Exception ex)
        {
            logs_box.Text = logs_box.Text + ex.Message + "\r\n";
        }
    }

Код Кнопки запуска:

private void start_server_Click(object sender, EventArgs e)
    {
        logs_box.Text = logs_box.Text + "Сервер запускается...\r\n";
        try
        {
            string ret_ip = input_ip.Text;
            int ret_port = Convert.ToInt32(input_port);
            string ret_target = input_target.Text;
            Thread mythread = new Thread(Server(ret_ip, ret_port, ret_target));
            mythread.Start();
        }
        catch (Exception ex)
        {
            logs_box.Text = logs_box.Text + ex.Message + "\r\n";
        }
    }

Я пытался решать эту проблему используя mainForm.changeText(this.Text); Но это кастыльно и не работает как надо. прошу помочь знающих людей.

Ответы

Ответов пока нет.