У меня есть RichTextBox, и существует около 1000 вхождений указанной строки поиска.
Я использую следующую функцию, чтобы закрасить все вхождения:
public void ColorAll(string s)
{
rtbxContent.BeginUpdate();
int start = 0, current = 0;
RichTextBoxFinds options = RichTextBoxFinds.MatchCase;
start = rtbxContent.Find(s, start, options);
while (start >= 0)
{
rtbxContent.SelectionStart = start;
rtbxContent.SelectionLength = s.Length;
rtbxContent.SelectionColor = Color.Red;
rtbxContent.SelectionBackColor = Color.Yellow;
current = start + s.Length;
if (current < rtbxContent.TextLength)
start = rtbxContent.Find(s, current, options);
else
break;
}
rtbxContent.EndUpdate();
}
Но я обнаружил, что это очень медленно.
Однако, если я раскрасю все вхождения другого слова, у которого меньше текста, в одном и том же тексте, я обнаружу, что это очень быстро.
Так что я думаю, что медлительность от (эти две строки могут включать обновление пользовательского интерфейса):
rtbxContent.SelectionColor = Color.Red;
rtbxContent.SelectionBackColor = Color.Yellow;
Есть ли более быстрый способ выполнения той же работы, например, я делаю раскраску в памяти, а затем отображаю результат за один раз?
Я проясняю себя?
Спасибо.