0

我正在尝试编写一个处理flowdocument的后台工作人员。由于线程验证,我无法访问flowdocument对象的属性。我试图序列化文档并将其加载到实际解决了线程验证问题的工作线程上。但是,一旦处理完成,我还需要使用诸如TextPointer对象之类的东西。这些对象现在指向副本中的对象而不是原始对象。如何编写在WPF flowdocument上工作的异步背景工作人员

任何人都可以建议在WPF中处理此类后台处理的最佳方法?

回答

1

不能,只能从创建它们的线程访问WPF对象,因此按照定义,您无法对它们执行任何后台处理。

但是,正如您已经发现的那样,您可以使用序列化技术在另一个线程中创建副本,并且可以将结果序列化回去。

XamlWriter/XamlReader可以序列化几乎每个WPF对象,但在大型对象图上可能会很慢。

而对于TextPointer,您可以使用GetOffsetToPosition/GetPositionAtOffset在主线程中重新创建一个等效的TextPointer。

另一种选择是使用Freezables,继承自Freezeable的对象可以从其他线程中使用(在调用Freeze方法之后),文档不是可冻结的,但绘图和几何图形是 - 因此您可能能够将文档“碎片“之间的线程作为图纸。