0

我编写了一个库,它可以进行一些繁重的布局和图形渲染。使用抽象层,我可以改变图形本身的实际创建方式(GDI、HTML5 等)。一种实现将不同的形状(路径、矩形)和控件(文本块)添加到画布并定位它们。通常在画布内创建大约 3000-5000 个孩子。

现在到我的实际问题:如果我从 WPF 窗口打开一个文件并让图形同步处理,UI 将阻塞。我的目标是在不同的线程上创建 WPF 树(画布 + 子项),并在渲染后立即将其添加到主窗口。乍一看很简单,但使用 WPF 时出现问题,因为它需要在 UI 线程上创建所有控件。

我想问是否有一种通用的方法可以在另一个线程上构建画布。我已经阅读了有关创建可冻结对象、冻结它们并随后将它们传递给主 UI 的可能性。问题:TextBlock类不能被冻结,这仍然需要重新迭代和处理数千个对象。

我最后的解决方案是在我的抽象层中构建纯 XAML 字符串并XamlParser在 UI 线程中使用。

我希望任何人都可以给我一些提示,我该如何解决这个问题。

4

1 回答 1

0

您可以在非 UI 线程中创建 UI 元素,但这很困难并且可能不值得付出努力。WPF 对于像这样的大量几何对象并不是很有效。这里有一些想法:

  • 在后台线程中使用 GDI 并在 UI 控件中绘制结果图像
  • 使用 WriteableBitmap(带有扩展名)
  • 创建您自己的控件,覆盖 OnRender 并尝试将所有内容直接绘制到绘图上下文
  • 使用 SlimDx 或 SharpDx 或您自己的托管 C++)和 D3dImage 使用 DirectX 渲染内容
于 2013-10-14T23:46:45.657 回答