C# 文本框延迟

本文关键字:延迟 文本 | 更新日期: 2023-09-27 18:30:25

我正在将数据从惯性传感器流式传输到 C# 应用程序中。使用布尔值作为开关,我将传入的值打印到一系列文本框中,如下所示:

    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])));
    }

问题是,一旦我开始这个循环,我的应用程序的其余部分就会大大减慢并开始滞后。我做错了吗?我尝试在新线程中启动循环,并看到相同的结果。

C# 文本框延迟

如果数据速率很高,则应考虑使用批量更新。不要在收到数据后立即更新,而是考虑每秒更新一次,或者在消息数超过阈值时进行更新。

可以使用后台辅助角色按特定时间间隔处理数据和更新 UI。你可以参考这个SO问题。

哪个线程调用 invoke 方法并不重要。如果在紧密循环中调用它,无论如何都会耗尽您的资源。尝试在每次迭代之前await Task.Delay(millis)一段时间。您甚至可以使用以下代码将其用作一种"最短时间":

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;
}