我编写了一个库,它可以进行一些繁重的布局和图形渲染。使用抽象层,我可以改变图形本身的实际创建方式(GDI、HTML5 等)。一种实现将不同的形状(路径、矩形)和控件(文本块)添加到画布并定位它们。通常在画布内创建大约 3000-5000 个孩子。
现在到我的实际问题:如果我从 WPF 窗口打开一个文件并让图形同步处理,UI 将阻塞。我的目标是在不同的线程上创建 WPF 树(画布 + 子项),并在渲染后立即将其添加到主窗口。乍一看很简单,但使用 WPF 时出现问题,因为它需要在 UI 线程上创建所有控件。
我想问是否有一种通用的方法可以在另一个线程上构建画布。我已经阅读了有关创建可冻结对象、冻结它们并随后将它们传递给主 UI 的可能性。问题:TextBlock
类不能被冻结,这仍然需要重新迭代和处理数千个对象。
我最后的解决方案是在我的抽象层中构建纯 XAML 字符串并XamlParser
在 UI 线程中使用。
我希望任何人都可以给我一些提示,我该如何解决这个问题。