1

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

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

调用线程无法访问此对象,因为不同的线程拥有它。在richtextbox.Document = new FlowDocument(paragraph);

4

1 回答 1

0

我已经分享了这个问题的解决方案作为类似问题的答案,请参阅SO 答案我的博客文章。在性能和缺乏 UI 阻塞方面是否应该满足您的需求。如果你从 2013 年开始找到了另一种解决问题的方法,你也可以分享一下吗?

于 2014-07-12T22:48:54.667 回答