c# - 重写 Text.text 会表现得很奇怪
问题描述
重写 Text.text 会表现得很奇怪。
我正在使用 Text 组件的文本在 Unity 的游戏屏幕上显示日志。由于 TCP 接收到的是异步操作,所以 Log 被放入队列一次,在 Update 方法中检索并显示。
private void Update()
{
if (LogQueue.Count > 0)
{
var msg = LogQueue.Dequeue();
Debug.Log(msg);
LogText.text = msg + "\n" + LogText.text;
}
}
public void CreateServer()
{
var portText = IpInput.text;
var port = int.Parse(portText);
server = new TcpListener(IPAddress.Any,port);
server.Start();
server.BeginAcceptTcpClient(new AsyncCallback(AcceptClientCallback), server);
LogQueue.Enqueue($"Server listening on port {port}");
LogQueue.Enqueue($"wait client ...");
}
private void AcceptClientCallback(IAsyncResult ar)
{
var listener = (TcpListener)ar.AsyncState;
client = listener.EndAcceptTcpClient(ar);
stream = client.GetStream();
var msg = System.Text.Encoding.ASCII.GetBytes("connected");
stream.Write(msg, 0, msg.Length);
LogQueue.Enqueue("connectd");
var buffer = new byte[128];
stream.BeginRead(buffer, 0, buffer.Length, ReadStreamCallBack, buffer);
}
private void ReadStreamCallBack(IAsyncResult ar)
{
Debug.Log("called");
var buffer = (byte[])ar.AsyncState;
var msg = System.Text.Encoding.ASCII.GetString(buffer, 0, buffer.Length);
LogQueue.Enqueue(msg);
var back = System.Text.Encoding.ASCII.GetBytes("received");
stream.Write(back, 0, back.Length);
var nextBuffer = new byte[128];
stream.BeginRead(nextBuffer, 0, nextBuffer.Length, ReadStreamCallBack, nextBuffer);
}
实际执行时,同步处理的日志正确显示如下。
sync log 1
sync log 2
sync log 1
sync log 3
sync log 2
sync log 1
但是,当开始显示与TCP异步接收的消息的日志时,之前的日志就消失了,只显示最新的日志。
received message 1
received message 2
received message 3
为什么会这样?
解决方案
删除空字符或仅接收所需的长度。
移动:
str = str.TrimEnd ('\ 0');
推荐阅读
- symfony - 如何在 Symfony 4 中使用 datetimeNormalizer?
- php - 如何将菜单项及其内容限制为 Woocommerce 中的登录用户
- python - 我在使用 tensorflow 在 python 中执行卷积神经网络程序时遇到错误,错误是
- java - 我的控制器在运行时工作,但 mockkmvc 测试因依赖项而失败,该依赖项甚至不在类中
- c++ - 由于 [abi:cxx11],两个 boost 库之间的符号不匹配
- regex - Google表格中的正则表达式正向向后看
- typescript - 如何在 node.js 打字稿中创建可写的全局变量
- python - 更改我的 BFS,使其返回所有目标路径并且处于同一级别,这是最小的
- c - 为什么我在这条 if 行中有分段错误?
- javascript - 如何将字符串限制为仅 12 个字符