C# WPF ошибка доступа из потока к RichTextBox.Document через Dispatcher

195
07 августа 2018, 21:10
private void Button_Click(object sender, RoutedEventArgs e)
{
    new Thread(() =>
    {
        FlowDocument doc = new FlowDocument();
        Paragraph paragraph = new Paragraph();
        paragraph.LineHeight = 2;
        paragraph.Inlines.Add(new Bold(new Run("11111"))
        {
            Foreground = Brushes.White,
            Background = Brushes.Black
        });
        doc.Blocks.Add(paragraph);
        rr(doc);
    }).Start();
}
private void rr(FlowDocument d)
{
    this.richtextbox1.Dispatcher.Invoke(DispatcherPriority.Normal, new Action(() => {
    this.richtextbox1.Document = d;  }));
}

выдает ошибку:

"The calling thread cannot access this object because a different thread owns it."

тоже самое если попробовать richtextbox1.Document.Blocks.Add(paragraph). А вот richtextbox1.AppendText(text) идет без проблем.

Answer 1

Вы создали FlowDocument в одном потоке. А обращаетесь к нему в другом. Так делать не получится. Организуйте паттерн Builder(Строитель), пусть он занимается созданием FlowDocument но уже в основном потоке.

READ ALSO
Проверка на наличие в DataGridView

Проверка на наличие в DataGridView

Требуется пройти по DataGridView и найти там определенные данные, введенные с textboxКак это реализовать?

204
Как отслеживать изменения в DB MS SQL 2008 на C# через Service Broker?

Как отслеживать изменения в DB MS SQL 2008 на C# через Service Broker?

Никак не могу разобраться с вопросом отслеживания изменений в базе данных

214
WPF Как реализовать асинхронность

WPF Как реализовать асинхронность

Имеется команда, которая по выделенной книге находит студентов, которым выдана книга

218
Слежение за изменением Transform Unity

Слежение за изменением Transform Unity

Как можно отследить, кто изменяет значения Transform у какого - нибудь объекта на сцене? В интернете есть ответы, но там они в основном состоят...

225