我正在创建一个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);
答案 0 :(得分:0)
我已经分享了这个问题的解决方案作为类似问题的答案, 请参阅SO answer和my blog post。 在性能和缺乏UI阻塞方面,如果符合您的需求。如果你从2013年开始找到解决问题的另一种方法,你也可以分享吗?