如何快速更新WPF画布?

时间:2011-03-24 07:42:17

标签: c# wpf line draw

在我的wpf应用程序中,我想更新画布上的一行(更改开始,结束点坐标)并预览更改。问题是我添加了行但我只能看到初始和最终状态。

有没有办法让线/画布实时更新?我想看看这条线是如何改变长度/位置的。

例如,我收到该行的开始/结束对列表。如果我循环列表并使用对中的值更新行的坐标,则无法看到中间状态。

我尝试将线条和画布的可见性设置为可见,以强制它们更新,但它不起作用。如果我只是添加新行,我无法看到它们是如何添加的,只是最后一步。

在下面的代码中,每次有新点时,都会从循环中调用DrawLine。

有什么建议吗?

public void DrawLine(List<Library2d.Point> points)
{
    PathFigure myPathFigure = new PathFigure();
    myPathFigure.StartPoint = new System.Windows.Point(points.ElementAt(0).X, points.ElementAt(0).Y);

    LineSegment myLineSegment = new LineSegment();
    myLineSegment.Point = new System.Windows.Point(points.ElementAt(1).X, points.ElementAt(1).Y);

    PathSegmentCollection myPathSegmentCollection = new PathSegmentCollection();
    myPathSegmentCollection.Add(myLineSegment);

    myPathFigure.Segments = myPathSegmentCollection;

    PathFigureCollection myPathFigureCollection = new PathFigureCollection();
    myPathFigureCollection.Add(myPathFigure);

    PathGeometry myPathGeometry = new PathGeometry();
    myPathGeometry.Figures = myPathFigureCollection;

    if (myPath == null)
    {            
    myPath = new Path();
    myPath.Stroke = Brushes.ForestGreen;
    myPath.StrokeThickness = 1;
    canvas.Children.Add(myPath);
    }

    myPath.Data = myPathGeometry;
    myPath.Visibility = Visibility.Visible;
    myPath.InvalidateMeasure();

    canvas.Visibility = Visibility.Visible;
    canvas.InvalidateMeasure();
}

1 个答案:

答案 0 :(得分:2)

渲染线程的调度程序优先级低于UI线程,因此您在UI线程中运行循环,同时应用所有更改,然后最终渲染器会对其进行处理。

您应该考虑将线绑定到数据点并改为更新它们。这是一篇关于如何为多边形实现此目的的文章:http://bea.stollnitz.com/blog/?p=35您可以根据自己的需要进行调整。