我的 WPF 窗口中有一个画布,我想绘制大量形状(大约十万个或更多)。像这样的东西:
<Window>
<Canvas>
<!--<Shape1/>
<Shape2/>
... and so on ... -->
</Canvas>
</Window>
要绘制形状,我有一种方法可以完成这样的工作:
public void DrawShape()
{
// Create the shape
ShapeT MyShape = new ShapeT();
// Set shape's properties (like Width, Fill, ...)
// Add shape as MyCanvas children.
MyCanvas.Children.Add(MyShape);
}
然后画,例如,我做的四万个形状:
for (uint i = 0; i < 0x9C40; ++i)
DrawShape();
问题是:
直到没有绘制所有图形,即直到循环完成,没有绘制图形并且我的窗口一直没有响应。
即使循环完成后,仍然需要几秒钟才能在视频上绘制数字,并且我的窗口继续被冻结。
我尝试使用Dispatcher:
Dispatcher.BeginInvoke(DispatcherPriority.Background, new MyDrawDelegate(DrawShape));
我试图创建一个新线程:
Thread DrawThread = new Thread(new ThreadStart(DrawShape));
DrawThread.SetApartmentState(ApartmentState.STA);
DrawThread.Priority = ThreadPriority.Lowest;
DrawThread.Start();
但没有任何变化。我该如何解决这些问题?
PS:出于性能原因,我使用Visual而不是Shape对象绘制我的形状。