У меня есть RichTextBox, и я пытаюсь найти и выделить все слова, соответствующие запросу, предоставленному пользователем. В коде у меня есть работы, но для довольно больших документов он зависает от пользовательского интерфейса, поскольку все делается в потоке пользовательского интерфейса.Как получить доступ к элементам управления WPF из фонового потока
List<TextRange> getAllMatchingRanges(String query)
{
TextRange searchRange = new TextRange(ricthBox.Document.ContentStart, ricthBox.Document.ContentEnd);
int offset = 0, startIndex = 0;
List<TextRange> final = new List<TextRange>();
TextRange result = null;
while (startIndex <= searchRange.Text.LastIndexOf(query))
{
offset = searchRange.Text.IndexOf(query, startIndex);
if (offset < 0)
break;
}
for (TextPointer start = searchRange.Start.GetPositionAtOffset(offset); start != searchRange.End; start = start.GetPositionAtOffset(1))
{
if (start.GetPositionAtOffset(query.Length) == null)
break;
result = new TextRange(start, start.GetPositionAtOffset(query.Length));
if (result.Text == query)
{
break;
}
}
if (result == null)
{
break;
}
final.Add(result);
startIndex = offset + query.Length;
}
return final;
}
Это возвращает список текстовых диапазонов, которые я могу затем выделить, но я не могу выполнить его на фоновом потоке, как он бросает исключение, так как я бы пытаюсь получить доступ к документу в RichTextBox на волоске, что Бесполезного Не создавайте его.