在.NET4.0 WPF中,我想使用后台线程在画布上显示一个drawingPath。以下ConsumerJob正在后台正确运行并轮询要绘制的点队列。我使用Dispatcher修改主线程上的画布并正确呈现它。但是,我希望这个代码在每个children.add被调用时(如动画)一次一个地显示每个段。会发生什么是整个显示器一次呈现而不是一次呈现一个片段。当孩子一次添加一个孩子时,我应该如何修改代码来呈现显示?
public void ConsumerJob()
{
while (true)
{
PointsD pt = (PointsD)queue.Consume();
displayQueue.Enqueue(pt);
pt = Scale(pt);
this.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
(ThreadStart)delegate()
{
Path drawingPath = new Path();
StreamGeometry streamingGeometry = new StreamGeometry();
drawingPath.Stroke = Brushes.Black;
drawingPath.StrokeThickness = 0.5;
using (StreamGeometryContext ctx = streamingGeometry.Open())
{
ctx.BeginFigure(new Point(pt.x0, pt.y0), false, false);
ctx.LineTo(new Point(pt.x1, pt.y1), true, false);
}
streamingGeometry.Freeze();
drawingPath.Data = streamingGeometry;
this.Children.Add(drawingPath);
}
);
}
答案 0 :(得分:1)
Dispatcher.BeginInvoke
是异步的,您是否尝试过同步对应Invoke
?
这应该至少强制所有排队的代表以正确的顺序执行,但不确定时间。
您可能还想尝试更高级别的DispatcherPriority。