C# 文本框延迟
C# text box latency
我正在将数据从惯性传感器流式传输到 C# 应用程序。使用 bool 作为开关,我将传入的值打印到一系列文本框,如下所示:
if (bStreaming == true)
{
textboxTX.Invoke(new Action(() => textboxTX.Text = Convert.ToString(result[0])));
textboxTY.Invoke(new Action(() => textboxTY.Text = Convert.ToString(result[1])));
textboxTZ.Invoke(new Action(() => textboxTZ.Text = Convert.ToString(result[2])));
}
问题是,一旦我开始这个循环,我的应用程序的其余部分就会显着变慢并开始滞后。我做错了吗?我尝试在新线程中启动循环,结果相同。
如果数据速率很高,那么您应该考虑使用批量更新。
不要在收到数据后立即更新,而是考虑每秒更新一次,或者在消息数量超过阈值时更新。
您可以使用后台程序处理数据并定期更新 UI。你可以参考this SO question.
哪个线程调用invoke方法并不重要。如果它在一个紧密的循环中被调用,它无论如何都会耗尽你的资源。在每次迭代之前尝试 await
ing Task.Delay(millis)
一段时间。您甚至可以使用以下代码将其用作一种 "minimum time":
while (true)
{
var updateFrequency = Task.Delay(1000);
if (bStreaming == true)
{
textboxTX.Invoke(new Action(() => textboxTX.Text = Convert.ToString(result[0])));
textboxTY.Invoke(new Action(() => textboxTY.Text = Convert.ToString(result[1])));
textboxTZ.Invoke(new Action(() => textboxTZ.Text = Convert.ToString(result[2])));
}
await updateFrequency;
}
我正在将数据从惯性传感器流式传输到 C# 应用程序。使用 bool 作为开关,我将传入的值打印到一系列文本框,如下所示:
if (bStreaming == true)
{
textboxTX.Invoke(new Action(() => textboxTX.Text = Convert.ToString(result[0])));
textboxTY.Invoke(new Action(() => textboxTY.Text = Convert.ToString(result[1])));
textboxTZ.Invoke(new Action(() => textboxTZ.Text = Convert.ToString(result[2])));
}
问题是,一旦我开始这个循环,我的应用程序的其余部分就会显着变慢并开始滞后。我做错了吗?我尝试在新线程中启动循环,结果相同。
如果数据速率很高,那么您应该考虑使用批量更新。 不要在收到数据后立即更新,而是考虑每秒更新一次,或者在消息数量超过阈值时更新。
您可以使用后台程序处理数据并定期更新 UI。你可以参考this SO question.
哪个线程调用invoke方法并不重要。如果它在一个紧密的循环中被调用,它无论如何都会耗尽你的资源。在每次迭代之前尝试 await
ing Task.Delay(millis)
一段时间。您甚至可以使用以下代码将其用作一种 "minimum time":
while (true)
{
var updateFrequency = Task.Delay(1000);
if (bStreaming == true)
{
textboxTX.Invoke(new Action(() => textboxTX.Text = Convert.ToString(result[0])));
textboxTY.Invoke(new Action(() => textboxTY.Text = Convert.ToString(result[1])));
textboxTZ.Invoke(new Action(() => textboxTZ.Text = Convert.ToString(result[2])));
}
await updateFrequency;
}