C#无法在富文本框中看到字符串

我正在研究c# winforms。我的rich textbox中有一个main form。现在,我正在使用类Handleclient,其中正在使用要在其中调用函数的线程。在该函数中,我创建了我的主要形式的新对象。我的代码在下面

流量

首先,我通过用户传递端口号,然后单击按钮,我将收听它。为此,我有一个名为Server

的类
**Main Form**
port = Convert.ToInt32(tbPort.Text);
Server server = new Server(port);
if (btnListen.Text == "Listen")
{
     btnListen.Text = "Close";
     server.start();
}

上面的对象已创建,并且调用了start方法

服务器类

public Server(int port)
{
   this.port = port;
}

 public void start()
 {

        listner = new TcpListener(new IPEndPoint(IPAddress.Any,port));
        listner.Start();
        listnerthread = new Thread(new ThreadStart(Listner));
        listnerthread.Start();

 }

public void Listner()
{
        while (true)
        {
            try
            {

                TcpClient C = listner.acceptTcpClient();
                Handleclient client = new Handleclient();
                client.startClient(C);

            }
            catch (Exception ex)
            {
                Console.WriteLine("Error in listner");
                Console.WriteLine(ex.Message);
            }
        }
}

以上方法正在监听端口。另外,我的句柄客户端函数也被调用。我试图在其中将输入的字符串显示在富文本框中

处理客户端

 // Buffer to store the response bytes.
byte[] data = new byte[9999];

Thread comThread;
public void startClient(TcpClient inClientsocket)
{
   this.clientsocket = inClientsocket;
   comThread = new Thread(doChat);
   comThread.Start();
}

private void doChat()
{

        MainForm form = new MainForm();

        while ((true))
        {
            try
            {

                // Read the first batch of the TcpServer response bytes.
                NetworkStream stream = clientsocket.GetStream();
                stream.ReadTimeout = 1000;
                int bytes = stream.Read(data,data.Length);                 

                responseData = BitConverter.ToString(data,bytes); 
                form.rtBRecievedData.Text = responseData;

                stream.Close();
                clientsocket.Close();


            }
            catch (Exception ex)
            {
                Console.WriteLine(" >> " + ex.ToString());
                comThread.Abort();
            }
        }

}

responseData的值为01-01-01-01-00-01-00-19-F4-09-10-00-00-00-00-30-30-32-39-39-38-30-30-35-35-36-31-00-01-00-01-00-01-00-15-AA-10-00-00-00-00-30-30-32-39-39-38-30-30-35-35-36-31-12-00-12

现在主要的问题是此字符串未显示在rich text box上。我可能会缺少我无法理解的内容。

任何帮助将不胜感激。

lttsusan 回答:C#无法在富文本框中看到字符串

form.rtBRecievedData.Text = responseData; 

在一个循环内。 但是没有Thread.Sleep()方法。

form.rtBRecievedData.Text可以在下一轮循环执行中替换为空的responseData字符串。

使用以下代码,

form.rtBRecievedData.Text += responseData; 

解决问题。 最好在循环中睡眠,以延迟读取端口。

,

您的问题是,您尝试在TextBox的新实例(从未调用过Show())上的MainForm中显示信息,而不是现有的{{1} },用户已在其中输入端口。要解决此问题,您的MainForm类需要引用现有表单。 将字段添加到您的HandleClientServer类中,并相应地调整构造函数:

HandleClient

现在,在创建public Server(int port,Form mainForm) { this.port = port; this.mainForm = mainForm; } public HandleClient (Form mainForm) { this.mainForm = mainForm; } 时,您将使用Server关键字将对当前表单的引用传递给this

最后,您删除创建新的HandleClient的行,而使用该字段。

本文链接:https://www.f2er.com/2836062.html

大家都在问