显示变量值的速度不够快

本文关键字:不够 速度 变量值 显示 | 更新日期: 2023-09-27 18:27:52

我有以下代码,应该通过TCP/IP发送一系列值,每个值都以某种方式修改变量"x"、"y"answers"z"。当我得到任何响应时,我希望代码显示"x"、"y"answers"z"的当前值,但它没有。我试过添加Sleep()、Timers,甚至用Labels代替textBoxes,但什么都没有。有什么想法吗?问候

for (i = 0; i < cant; i++)
        {
            byte[] data = null;
            aux = (Convert.ToInt32(v[i, 3] + 48, CultureInfo.InvariantCulture));
            //update variables' values
            x = x + Convert.ToInt32(v[i, 0]);
            y = y + Convert.ToInt32(v[i, 1]);
            z = z + Convert.ToInt32(v[i, 2]);
            data = System.BitConverter.GetBytes(aux);
            NetworkStream stream = client.GetStream();
            // String to store the response ASCII representation.
            String responseData = String.Empty;
            // Send the message to the connected TcpServer. 
            stream.Write(data, 0, 1);
            // Buffer to store the response bytes.
            data = new Byte[256];                
            while (responseData.Length == 0)
            {
                // Read the first batch of the TcpServer response bytes.
                Int32 bytes = stream.Read(data, 0, data.Length);
                responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
            }
            //DISPLAY CURRENT VALUES
            textBoxX.Text = x.ToString();
            textBoxY.Text = y.ToString();
            textBoxZ.Text = z.ToString();
        }

显示变量值的速度不够快

我猜您的文本框/label/etc没有机会重新绘制,因为上面的代码正在应用程序的主GUI线程中运行。线程正忙于为循环执行此操作,因此无法处理重新绘制事件。Sleep没有帮助,因为它使正在休眠的线程是执行重绘所需的线程。

要解决这个问题,您需要将上面的循环放入自己的线程中。这将使GUI线程有机会重新绘制控件。您需要使用Invoke方法来更新控件,因为会出现跨线程执行错误。