Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在富文本框中查看字符串_C#_Winforms_Richtextbox - Fatal编程技术网

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

C# 无法在富文本框中查看字符串,c#,winforms,richtextbox,C#,Winforms,Richtextbox,我正在使用c#winforms。我的主窗体中有一个丰富的文本框。现在我正在使用一个类HandleClient,其中我正在使用一个线程,在该线程中我正在调用一个函数。在这个函数中,我以我的主要形式创建了一个新对象。我的代码在下面 流量 首先,我通过用户传递一个端口号,点击按钮,我将收听它。为此,我有一个名为Server 主表单 port = Convert.ToInt32(tbPort.Text); Server server = new Server(port); if (btnListen.T

我正在使用
c#winforms
。我的
主窗体中有一个
丰富的文本框
。现在我正在使用一个类
HandleClient
,其中我正在使用一个线程,在该线程中我正在调用一个函数。在这个函数中,我以我的主要形式创建了一个新对象。我的代码在下面

流量

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

主表单

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);
            }
        }
}
上述方法正在侦听端口。另外,我的handle客户端函数也被调用。在其中,我试图向富文本框显示传入字符串

处理客户端

 // 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, 0, data.Length);                 

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

                stream.Close();
                clientsocket.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine(" >> " + ex.ToString());
                comThread.Abort();
            }
        }
}
响应数据的值为
01-01-01-00-01-00-19-F4-09-10-00-00-00-30-30-32-39-38-30-35-35-36-31-00-01-00-01-00-15-AA-10-00-00-00-00-30-30-35-36-31-12

现在主要的问题是这个字符串没有显示在
富文本框中。我可能错过了一些我无法理解的东西

任何帮助都将不胜感激

form.rtBRecievedData.Text = responseData; 
在一个循环中。 但是没有Thread.Sleep()方法

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

使用以下代码

form.rtBRecievedData.Text += responseData; 
解决问题。
最好在循环中休眠,以延迟读取端口。

您的问题是,您试图在
文本框中显示
中的信息,该文本框位于
MainForm
的新实例(您从未调用过Show())上,而不是在现有的
MainForm
上,其中用户已输入端口。要解决此问题,您的
HandleClient
类需要对现有表单的引用。 向
服务器
HandleClient
类添加字段,并相应地调整构造函数:

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

public HandleClient (Form mainForm)
{
    this.mainForm = mainForm;
}
现在,在创建
服务器
时,您可以使用
this
关键字传递对当前表单的引用,从而传递到
HandleClient


最后,删除创建新的
MainForm
的行,并改用该字段。

在哪里显示该表单?@RonBeyer我正在使用该表单发送端口号,然后接收该端口上的数据。请检查“BitConverter.ToString(数据,0,字节)”是否返回字符串值。它可以返回一个空白。@Nurhan是的,它返回一个空白string@Faisal何时何地调用表单的Show()方法?是否将form.rtBRecievedData.Text+=responseData;中的=更改为+=?是否有任何错误、异常或只是没有显示文本?请调试并检查值分配是否正确。我已经尝试了您的方法,但它给了我一个异常
对象引用未设置为对象的实例
此。mainForm
null
我已执行了以下
公共mainForm mainForm{get;set;}
然后
服务器=新服务器(port,this.mainForm);
inside
server.cs
我声明了
public int-port{get;set;}public mainForm mainForm{get;set;}
之后我完成了
public server(int-port,mainForm mainForm){this.port=port;this.mainForm=mainForm;}
在我的
server.cs
监听器中,我已经完成了以下
HandleClient=new HandleClient(this.mainForm);
现在在我的
HandleClient.cs
中,我已经声明了
public mainForm mainForm{get;set;
然后是
public HandleClient(mainForm mainForm){this.mainForm=mainForm;}
最后,在我的
docat()
方法中,我完成了
mainForm.rtBRecievedData.Text=responseData;
在这一行之后,我得到了异常