显示变量值的速度不够快
本文关键字:不够 速度 变量值 显示 | 更新日期: 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方法来更新控件,因为会出现跨线程执行错误。