重写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,msg.Length);
            LogQueue.Enqueue("connectd");

            var buffer = new byte[128];
            stream.BeginRead(buffer,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,buffer.Length);

            LogQueue.Enqueue(msg);            

            var back = System.Text.Encoding.ASCII.GetBytes("received");
            stream.Write(back,back.Length);

            var nextBuffer = new byte[128];
            stream.BeginRead(nextBuffer,nextBuffer.Length,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

为什么会这样?

hebeipl 回答:重写Text.text的行为会很奇怪

删除空字符或仅接收所需的长度。

删除: str = str.TrimEnd ('\ 0');

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

大家都在问