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);
insideserver.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;
在这一行之后,我得到了异常