TextBox字符串长度太大,无法滚动

时间:2015-04-02 17:23:24

标签: c# wpf

我有一个TextBox,它绑定到我的ViewModel中的字符串。

XAML

<TextBox x:Name="TracesTextBox" IsReadOnly="True" Text="{Binding Traces, Mode=OneWay}" UndoLimit="0" IsUndoEnabled="False" Margin="5" 
VerticalScrollBarVisibility="Auto" FontSize="10" TextChanged="OnTextBoxTextChanged" HorizontalScrollBarVisibility="Auto"
BorderBrush="{DynamicResource AccentColorBrush}"/>

此外,我在后面的代码中做了一些事情,当字符串更新时,向下滚动文本框,以便我可以看到最后一个字符串被附加

Code Behind

private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
{
    TracesTextBox.CaretIndex = TracesTextBox.Text.Length;
    TracesTextBox.ScrollToEnd();
}

这段代码由后台线程执行,后者线程从以太网

获取数据

ViewModel Code Invoked by Background thread

var str =((float)(msg.ArrivalTimeMs / 1000.0)).ToString("00000.000").PadRight(16, ' ') ;
str+= msg.Bytes.Take(msg.len).Aggregate(str, (current, dataByte) => current + (dataByte.ToString("X").PadLeft(2, '0') + " ")) + "\n";
UiTaskFactory.StartNew(() =>
{
    Traces += str;
}
);

问题是,在运行应用程序几个小时后,Traces中的文本量变得非常大,UI根本不响应滚动。

现在,我如何在字符串的开头执行某种剥离并保留我收到的最后一千行?我想这将花费在处理器使用方面。如果我从以太网接收的消息较少,则滚动响应非常快。我想过使用字符串队列,但是有没有更优雅的解决方案来处理数千行字符串?

0 个答案:

没有答案