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

mjk*_*026 6 wpf multithreading backgroundworker

我正在制作一个构建一个巨大的FlowDocument的应用程序.构建FlowDocument所用的时间约为3~4秒.

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

我怎么解决这个问题?

Ed *_*tes 7

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

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

  • 不幸的是,基本上是的.但这比使用无响应的应用程序3-4秒要好得多.你唯一能做的就是定期调用一个版本的DoEvents,虽然这不是那么好,但可能还不错. (2认同)