GDI +の効率について質問がありました。 いくつかの変数とメソッド は以下のようにあります など1.Points、(例えばXYZとして座標点を表す。)、等B、C、D、E、更新移動マウス
2使用CMD1名前付きリスト、この方法では、
3.Paint法スレッドによって行例えばF、G、H、Iのような新たな点、一定の付加のため
4.Threadに接続された点のセットポイントを追加します、Jなど
ペイントメソッドでは、g.DrawLine()を使用してaとb、c、d、eをリンクします。 スレッドでは、新しいポイントを追加すると、コンポーネントを更新するためにinvalidを呼び出します。 私の質問はますますポイントが増え、どのように高効率を維持して再描画できるのですか?
再描画することから始めることはありません。
Private Sub Sheet_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
If Me.Cmd1s.Count>0 Then
DrawGLines2(e.Graphics)
End If
End Sub
Public Sub AddPoint(x As Double, y As Double, z As Double, Optional G As Int32 = -1)
Dim cmd1 As DrvSimu.Cmd1 = Nothing
If cmd1 Is Nothing Then
cmd1 = New DrvSimu.Cmd1
Me.Cmd1s.Add(cmd1)
End If
Dim pf3d As New PointF3D(x, y, z)
cmd1.PointF3Ds.Add(pf3d)
Me.Invalidate()
End Sub
Sub DrawGLines2(g As Graphics)
g.SmoothingMode = SmoothingMode.HighSpeed
Dim Pen As New Pen(Brushes.White)
Dim i As Int32
'Dim c As Int32
Dim preCmd1 As Cmd1
Try
For Each cmd As Cmd1 In Cmd1s
Dim pfs() As PointF = cmd.PointFs.ToArray
If preCmd1 IsNot Nothing Then
g.DrawLine(Pen, cmd.PointFs(0), preCmd1.PointFs(0))
End If
preCmd1 = cmd
End If
Next
Catch ex As Exception
Debug.Print(ex.Message)
End Try
End Sub
AddPointを呼び出しますスレッドが、B、C、D、Eのポイントを追加し、更新するために、無効なメソッドを使用するために、私は、無効呼び出すとき"For Each cmd in Cmd1 In Cmd1s"はそれぞれA点から始まるので、点がますます増えると、どのように高効率を維持して再描画するのかをA点から再描画することはできません。
あなたはいくつかの詳細やデモを表示できますか?もっと知ることができます。 – xuyunhai
ありがとう、私は注意深くそれを読むでしょう。 – xuyunhai
私は問題を発見しました: あなたは効率改善がビットマップの使用によるものだと思いますが、私は効率改善が新しいポイントの再描画に依存していると思っています。言い換えれば、新しく追加されたポイントを再描画する唯一の方法であれば、BITMAPを使用して効率を向上させることができます。 – xuyunhai