gpt4 book ai didi

c# - WPF 文本框性能

转载 作者:行者123 更新时间:2023-11-30 20:28:47 27 4
gpt4 key购买 nike

我正在开发一个在单独的线程中检索数据的应用程序。在线程中“调用”委托(delegate)以获取 View 模型中的数据。字符串属性将用于设置 WPF 文本框的文本(数据绑定(bind))。

View 模型

private string _resultText;
public string ResultText
{
get
{
return _resultText;
}
set
{
_resultText = value;
RaisePropertyChanged();
}
}

XAML

<TextBox Name="tbxResult" Text="{Binding ResultText, Mode=TwoWay}" TextWrapping="NoWrap" Padding="10,10,10,10" IsReadOnly="True"/>

线程正在检索大量数据,这会导致性能问题。 UI 被卡住,直到检索到所有数据。我已经尝试使用 Binding IsAsync="True"属性 TextWrapping="NoWrap",在 ResultText 的 setter 中调用 Dispatcher.Invoke 并检查了问题 'slow-wpf-textbox' .

所提供的解决方案均未提高性能。

执行以下代码会导致相同的(性能)问题:

private void btnRetrieveResultData_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 3000; i++)
{
tbxResult.Dispatcher.Invoke(() =>
{
tbxResult.AppendText("testMessage" + i);
});
}
}

处理大量数据并将其显示在 TextBox 中的解决方案/实现是什么? (它可能是另一个提供滚动和选择文本选项的控件)。

最佳答案

我不确定我是否理解您的问题,但我将使用“执行以下代码会导致相同的(性能)问题”,将 i 更改为 300.000 以向文本框添加更多文本。将其更改为:

   private void ButtonClicked(object sender, RoutedEventArgs e) {
Task.Run(() =>
{
for (int i = 0; i < 300000; i++) {
tbxResult.Dispatcher.Invoke(() => {
tbxResult.AppendText("testMessage" + i + "\r\n");
}, DispatcherPriority.Background);
}
});
}

以非常流畅的方式向文本框添加行,没有任何 UI 卡住,您实际上可以在添加项目时手动滚动文本框。

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

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