2012-04-25 111 views
1

我需要从一大组数据中动态生成FlowDocument。由于该过程需要几分钟,所以我想在后台线程上执行操作,而不是让UI挂起。在BackgroundWorker线程上创建FlowDocument

但是,我无法在非UI线程上生成FlowDocument,否则会尝试插入矩形和图像会导致运行时错误,从而抱怨它不是STA线程。

有一对夫妇在计算器上线的,这似乎涉及我有同样的问题...

Accessing a WPF FlowDocument in a BackGround Process

“WPF“在后台进程访问一个WPF的FlowDocument”:是它不可能在后台线程中加载UI?“ WPF : Is it impossible to UI load in background thread?

在第一个环节有人提出以下建议:

“我会做什么:使用的XamlWriter和序列化的FlowDocument成一个XDocument序列化任务涉及的调度,但一旦它的。完成后,您可以根据需要运行尽可能多的古怪并行数据分析,UI中的任何内容都不会影响它(同样,一旦它是XDocument,您可以使用XPath查询它,这是一个相当不错的锤子,只要您遇到问题)“

有人能详细说明authour的意思吗?

许多TIA

+0

然后使用最终的FlowDocument创建XpsDocument,然后使用XAML中的DocumentViewer控件将其显示为FixedDocumentSequence。 – JamesPD 2012-04-25 10:02:09

+0

您是否在开始在后台线程中生成内容之前,在ui线程上实例化了flowdocument?或类似的东西? – TheZenker 2012-04-25 14:24:45

回答

0

虽然不是真的一个答案,详细阐述了你的报价方式的作者,也许这可以成为你的问题的解决方案:如果你自己钩入Application.Idle事件 ,你可以在那里逐个构建您的FlowDocument。这个事件仍然在UI线程中,所以你不会像在后台工作者那样得到问题。 虽然你必须小心,不要一次做太多的工作,否则你会阻止你的应用程序。 如果可以将生成过程分成小块,则可以在这种情况下逐个处理这些块。