Я пытаюсь разработать функцию, в которой пользователь может выбрать из списка хастагов и FriendList и добавлять их в RichEditBox, когда он печатает с использованием предложений Auto, вроде автозаполнения. Вот код, который делает это.Изменение выбора выделенного текста RichEditBox AccessViolationException
private void MentionSuggestionList_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.AddedItems.Count > 0)
{
bool flag = false;
int index = 0;
for (int i = PostRichEditBox.Document.Selection.EndPosition - 1; i >= 0; i--)
{
if (Char.IsLetterOrDigit(_postText[i]) || _postText[i] == '_')
{
continue;
}
else if (_postText[i] == '@' || _postText[i] == '#')
{
flag = true;
index = i + 1;
break;
}
else
{
break;
}
}
if (flag)
{
PostRichEditBox.Document.Selection.StartPosition = index;
//AccessViolationException here
PostRichEditBox.Document.Selection.SetText(TextSetOptions.None, (e.AddedItems[0] as MentionUserModel).screenName + " ");
PostRichEditBox.Document.Selection.StartPosition = PostRichEditBox.Document.Selection.EndPosition;
}
}
}
Но я получаю AccessViolation случайным образом, когда меняю текст выбора richeditbox. Его случайный, но достаточно частый, чтобы я мог повторять его каждый раз только в немногих. Я даже поймаю это исключение. Что мне делать?
Нечто похожее на мой вопрос о msdn here, согласно которому это известная проблема. Но Ragy huyn's 6tag делает это безупречно. как?
Я попытался изменить RichEditBox с помощью TextBox, и это все равно происходит и с этим элементом управления.