[英]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.