我编写了一个库,可以进行一些繁重的布局和图形渲染。使用抽象层我可以改变图形本身的实际创建方式(GDI,HTML5等)。一种实现将不同的形状(路径,矩形)和控件(TextBlock)添加到画布并定位它们。画布中通常会创建大约3000-5000个孩子。
现在我的实际问题:如果我从WPF窗口打开文件并同步处理图形,UI将阻止。我的目标是在不同的线程上创建WPF树(canvas + children),并在渲染后立即将其添加到主窗口。简单的第一个想法,但使用WPF的问题,因为它需要在UI线程上创建所有控件。
我想问一下如何在另一个线程上构建画布的常用方法。我已经读过创建freezable对象的可能性,冻结它们并在之后将它们传递给主UI。问题是:TextBlock
类不能被冻结,这仍然需要迭代和处理数千个对象。
我的最后一个解决方案是在我的抽象层中构建普通的XAML字符串,并在UI线程中使用XamlParser
。
我希望有人能给我一些提示,以解决这个问题。
答案 0 :(得分:0)
您可以在非UI线程中创建UI元素,但这很困难,可能不值得付出努力。 WPF对于大量的几何对象效率不是很高效,一般来说......这里有一些想法: