gpt4 book ai didi

c# - 慢 WPF 文本框

转载 作者:行者123 更新时间:2023-11-30 15:09:37 25 4
gpt4 key购买 nike

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

我在多核计算机上运行。我的应用程序由一个文本 block 和一个用于打开/关闭端口的按钮组成。 (我尝试用文本框替换文本 block ,但我发现了同样的问题)

我的 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();
});
}

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

最佳答案

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

关闭文字换行完全消除了我的 UI 锁定问题:

TextWrapping="NoWrap"

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

希望这对您有所帮助。

关于c# - 慢 WPF 文本框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4228289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com