我正在开发一个简单的串行数据查看器,它将用于观察传输到计算机串行端口之一的数据。我使用 C# 和 WPF 编写了一个测试应用程序;它只是将最近读取的行放入文本块中。但是,它会跳过所有其他行。我的理论是,在 WPF 渲染窗口之前,新数据会被放入文本块中。然而,我已经尝试了我能想到的所有线程优先级组合,并且应用程序最多显示每隔一行;最坏的情况是每 20 行显示一次。
我正在多核计算机上运行。我的应用程序由一个文本块和一个用于打开/关闭端口的按钮组成。 (我尝试用文本框替换文本块,并且我观察到同样的问题)
My 收到数据处理程序:
private void MainWindow_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
string message = sp.ReadLine();
if (string.IsNullOrWhiteSpace(message))
return;
this.Dispatcher.BeginInvoke(DispatcherPriority.Send, (ThreadStart)delegate()
{
text.Text = message;
this.InvalidateVisual();
});
}
该应用程序的最高优先级是处理大量数据的持续吞吐量; WPF 适合这种情况吗?如果是的话,我做错了什么?
我意识到这对于游戏来说真的很晚了,但是在与这个问题斗争了大约一个月之后,我偶然发现了文本框更新缓慢的问题根源:
关闭文本环绕完全解决了我的 UI 锁定问题:
TextWrapping=“无换行”
当然,这意味着您需要更加负责地确保在通过 Environment.NewLine 更新文本框之前正确包装字符串,但在我看来,这是一个很小的代价。
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)