public void DrawingPulseData(byte[] data)
{
// Make sure that the curvelist has at least one curve
if (PulseControl.GraphPane.CurveList.Count <= 0)
return;
// Get the first CurveItem in the graph
LineItem curve = PulseControl.GraphPane.CurveList[0] as LineItem;
if (curve == null)
return;
// Get the PointPairList
IPointListEdit list = curve.Points as IPointListEdit;
// If this is null, it means the reference at curve.Points does not
// support IPointListEdit, so we won't be able to modify it
if (list == null)
return;
double time = (Environment.TickCount - tickStart) / 1000.0;
for (int i = 0; i < count; i++)
{
list.Add(time, (double)data[i]);
}
Scale xScale = PulseControl.GraphPane.XAxis.Scale;
if (time > xScale.Max - xScale.MajorStep)
{
xScale.Max = time + xScale.MajorStep;
xScale.Min = xScale.Max - 30.0;
}
// Make sure the Y axis is rescaled to accommodate actual data
PulseControl.AxisChange();
// Force a redraw
PulseControl.Invalidate();
count = 0;
}
やあ。このメソッドを使用して、zedgraph でリアルタイム データを描画しています。count
着信シリアル ポート データの長さです。このコードは timer(20ms) で正常に動作し、各ティックでデータを描画します。ただし、このメソッドをクラスに移動すると、正しく機能しません。あまりにも速く間違ったデータを描画します。
public static void DrawingPulseData(byte[] data,ZedGraphControl zgc,int count, int TickStart)
クラスに移動した後、このようにパラメーターを変更しました。PulseControl を zgc に、tickstart を TickStart に変更しました。最初のコードと同じように動作しない理由がわかりませんでした。
最初の画像では、@discomurray から提供されたコードを使用して、このコード ステートメントを if のスコープ外に書きました。このようなデータが得られます。
Scale xScale = zgc.GraphPane.XAxis.Scale;
xScale.Max = now;
xScale.Min = now - 30.0;
同じコード ステートメントを if のスコープ データに書き込むと、上の図のようになります。10秒の記録です。私の方法ではそのようなデータはありません。