WPFキャンバスを本当に高速に更新する方法は?

c# draw line wpf
WPFキャンバスを本当に高速に更新する方法は?

私のwpfアプリでは、キャンバス上の行を更新し(開始点、終了点の座標を変更)、変更をプレビューします。 問題は、行を追加することですが、初期状態と最終状態しか表示されないことです。

ライン/キャンバスをリアルタイムで更新する方法はありますか? 線の長さ/位置がどのように変化するかを確認したい。

たとえば、ラインの開始/終了ペアのリストを受け取ります。 リストをループし、ペアの値でラインの座標を更新すると、中間状態を確認できません。

強制的に更新するために、ラインとキャンバスの可視性を可視に設定しようとしましたが、機能しません。 新しい行を追加するだけの場合、それらがどのように追加されるかはわかりませんが、最後のステップです。

以下のコードでは、新しいポイントがあるたびにメソッドDrawLineがループから呼び出されます。

助言がありますか?

public void DrawLine(List 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  1


ベストアンサー

レンダリングスレッドはUIスレッドよりもディスパッチャの優先度が低いため、UIスレッドのループをすべて実行して、一度にすべての変更を適用し、最後にレンダラーがそのショットを取得します。

線をデータポイントにバインドし、代わりにそれらを更新することを検討してください。 ポリゴンでこれを実現する方法に関する記事は次のとおりです。http://bea.stollnitz.com/blog/?p = 35

2


タイトルとURLをコピーしました