在主线程中创建子线程中的段落到FlowDocument

时间:2013-06-14 09:36:24

标签: c# wpf multithreading richtextbox paragraph

我正在创建一个Thread来执行一些长期运行并构建一个我将在RichTextBox中显示的段落。

通常这只是通过以下方式完成:

Paragraph paragraph = new Paragraph();
paragraph.Inlines.Add(new TextBlock()
{
    Text = "Hello i´m som text",
        TextWrapping = TextWrapping.NoWrap
});
richtextbox.Document = new FlowDocument(paragraph);

(工作正常)

但我想在一个帖子中创建Paragraph,然后添加到RichTextBox中:

Thread t = new Thread(new ThreadStart(CreateText));
t.Start();

private void CreateText()
{
    Paragraph paragraph = new Paragraph();
    paragraph.Inlines.Add(new TextBlock()
    {
        Text = "Hello i´m som text",
            TextWrapping = TextWrapping.NoWrap
    });
    Main.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action(() =>
    {
        richtextbox.Document = new FlowDocument(paragraph);
    }
}

我的问题是这将返回错误:

  

调用线程无法访问此对象,因为另一个线程拥有它。 on richtextbox.Document = new FlowDocument(paragraph);

1 个答案:

答案 0 :(得分:0)

我已经分享了这个问题的解决方案作为类似问题的答案, 请参阅SO answermy blog post。 在性能和缺乏UI阻塞方面,如果符合您的需求。如果你从2013年开始找到解决问题的另一种方法,你也可以分享吗?