RichTextBox在WPF中表现糟糕

时间:2015-04-23 13:35:43

标签: c# wpf

我实现了一个基本上导入数据的程序。导入日志使用StringBuilder构建,然后以RichTextBox编程,以新的Window打印。

我搜索了如何高亮显示特定单词以及如何放入包含特定字符的粗体字。

例如,我的部分日志如下所示:

Screenshot

我没有在WPF中找到一个“神奇的解决方案”,因此我制作的代码不是非常优化/正确。这是我的代码:

TextRange tr;
foreach(var line in finalText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None)
{
    tr = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);

    foreach (var word in line.Split(' '))
    {
        tr = new TextRange(rtb.Document.ContentEnd, rtb.Document.ContentEnd);
        tr.Text = word + ' ';

        if (line.IndexOf("====", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Bold);
        }
        else if (line.IndexOf("Statut", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.FontSizeProperty, (double)14);
        }
        else if (line.IndexOf("Fin", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.FontSizeProperty, (double)14);
        }
        else
        {
            tr.ApplyPropertyValue(TextElement.FontWeightProperty, FontWeights.Normal);
            tr.ApplyPropertyValue(TextElement.FontSizeProperty, (double)12);
        }

        if (word.IndexOf("Succès", StringComparison.OrdinalIgnoreCase) >= 0 || word.IndexOf("Succes", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Green);
        }
        else if (word.IndexOf("Erreur", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Red);
        }
        else if (word.IndexOf("Info", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.DarkOrange);
        }
        else if (word.IndexOf("Modif", StringComparison.OrdinalIgnoreCase) >= 0)
        {
            tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.DarkBlue);
        }
        else
        {
            tr.ApplyPropertyValue(TextElement.ForegroundProperty, Brushes.Black);
        }
    }
    tr.Text += Environment.NewLine;
}

注意finalText是表示日志的String,而rtb是RichTextBox。

正如您所看到的,当整行需要以粗体显示时,我会将该属性重新应用于每个单词,因为我需要为每个新单词添加一个新的TextRange,以便更改颜色。

问题是,只有几行日志(比方说50 lines),我发现我的代码非常慢:这段代码需要3 seconds才能完成。导入本身(打开文件,分析,在数据库中对大量数据进行操作)不需要这么长时间。

任何减少这个时间的提示?

提前谢谢。

0 个答案:

没有答案