在子线程中创建段落到主线程中的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(段落);
我已经分享了这个问题的解决方案作为类似问题的答案,请参考SO的答案和我的博客帖子。在性能和缺乏UI阻塞方面,它应该符合您的需求。如果你从2013年开始找到了另一种解决问题的方法,你能分享一下吗?