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

本文关键字:线程 FlowDocument 创建 段落 | 更新日期: 2023-09-27 18:18:36

我正在创建一个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);

(没问题)

但是我想在一个线程中创建段落,然后添加到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);
    }
}

我的问题是这将返回Error:

调用线程不能访问这个对象,因为它被其他线程拥有。richtextbox。文档= new FlowDocument(段落);

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

我已经分享了这个问题的解决方案作为类似问题的答案,请参考SO的答案和我的博客帖子。在性能和缺乏UI阻塞方面,它应该符合您的需求。如果你从2013年开始找到了另一种解决问题的方法,你能分享一下吗?