WPF:在后台线程中加载UI是不可能的?

时间:2011-08-08 04:20:40

标签: wpf multithreading backgroundworker

我正在创建一个构建一个巨大的FlowDocument的应用程序。构建FlowDocument的时间大约为3~4秒。

所以我喜欢在BackgroundWorker中构建FlowDocument,而不是UI线程。但BackgroundWorker无法返回WPF UI对象。 (它发生了InvalidOperationException异常。)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

如果要在另一个线程中构建FlowDocument,它必须是第二个UI类型的线程,而不是BackgroundWorker。尽管文档说的是,但您可以构建多个UI类型的线程。但是,您无法在一个线程中创建UI对象,而在另一个线程中使用它们。您可以将FlowDocument保存到磁盘,然后在前台UI线程中重新加载它。

This article有两个UI线程的好例子,事实上我已经使用这段代码在后台线程中处理XPS文件,与你正在做的非常相似。确保你的第二个UI线程设置为STA的公寓状态,正如我所说,不要尝试在一个不同的线程中使用在一个线程中创建的任何UI对象。它不起作用。