慢速 WPF 文本框

CWM*_*Man 3 c# wpf textbox serial-port

我正在开发一个简单的串行数据查看器,它将用于观察传输到计算机串行端口之一的数据。我使用 C# 和 WPF 编写了一个测试应用程序;它只是将最近读取的行放入文本块中。但是,它会跳过所有其他行。我的理论是,在 WPF 渲染窗口之前,新数据会被放入文本块中。然而,我已经尝试了我能想到的所有线程优先级组合,并且应用程序最多显示每隔一行;最坏的情况是每 20 行显示一次。

我正在多核计算机上运行。我的应用程序由一个文本块和一个用于打开/关闭端口的按钮组成。(我尝试用文本框替换文本块,并且我观察到同样的问题)

我的DataReceived处理程序:

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();
    });
}
Run Code Online (Sandbox Code Playgroud)

该应用程序的最高优先级是处理大量数据的持续吞吐量;WPF 适合这种情况吗?如果是的话,我做错了什么?

小智 5

我意识到这对于游戏来说真的很晚了,但是在与这个问题斗争了大约一个月之后,我偶然发现了文本框更新缓慢问题的根源:

关闭文本环绕完全解决了我的 UI 锁定问题:

TextWrapping=“无换行”

当然,这意味着您需要更加负责地确保在通过 Environment.NewLine 更新文本框之前正确包装字符串,但在我看来,这是一个很小的代价。

希望这可以帮助。