簡體   English   中英

C#文本框延遲

[英]C# text box latency

我正在將數據從慣性傳感器傳輸到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])));
    }

問題是,一旦啟動此循環,我的其余應用程序就會大大減慢速度並開始滯后。 我做錯了嗎? 我嘗試在新線程中啟動循環,並看到相同的結果。

如果數據速率很高,則應考慮使用批處理更新。 與其考慮在收到數據后立即更新,不如考慮每秒更新一次,或者在消息數超過閾值時進行更新。

您可以使用backgroundworker來處理數據並在一定間隔下更新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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM