Невозможно построить только новые значения

Я пытаюсь сделать график (график с использованием oxyplot), который обновляется для каждого timer.elapsed. Я использую сюжет OxyPlot. Интервал для таймера составляет 500 мс, и данные собираются в for loop следующим образом:

for (uint i = _startIndex; i < (_startIndex + _sampleCount); i++)
{
    SampleCont[i] = adc_to_mv(appBuffersPinned[0].Target[i], inputRanges[SelRangeIndex]);
    double power = SampleIntervalr * Math.Pow(10, -9);
    sampleTimeCont[i] = (double)(i * power);
}

Прошедшее время и его методы для обновления графика соответствуют следующему:

private void OnTimedEvent(object sender, ElapsedEventArgs e)
{
    ss = "Timer elapsed" + Environment.NewLine;
    InsertText(ss);
    if (!sendit)
    {
       // if it's not a plot created plese initiate the plot first
       InitiateStreamPlot();
    }
    else
    {
        UpdatePlot();
    }
}

И тогда у нас есть InitiateStreamPlotи UpdatePlot следующим образом:

    private void InitiateStreamPlot()
    {
        myModel = new PlotModel { Title = "Voltage level" };
        ss = "New streaming plot is starting" + Environment.NewLine;

        series1 = new LineSeries
        {
            MarkerType = MarkerType.Circle,
            StrokeThickness = 1,
            MarkerSize = 1,
            Smooth = true,
            Title = "Voltage level",
            CanTrackerInterpolatePoints = false,

        };

        linearAxis1 = new LinearAxis { Position = AxisPosition.Bottom, Title = "Time in nanosec" };
        linearAxis2 = new LinearAxis { Position = AxisPosition.Left, Title = "Voltage" };

        myModel.Axes.Add(linearAxis1);
        myModel.Axes.Add(linearAxis2);

        for (int i = 0; i < SampleCont.Length; i++)
        {
            series1.Points.Add(new OxyPlot.DataPoint(sampleTimeCont[i], SampleCont[i]));
        }

        myModel.Series.Add(series1);
        plotView1.Model = myModel;
        sendit = true;
    }

А также

    /// <summary>
    /// Updating the chart.Invoke is required for not blocking UI thread
    /// since we use a timer we do calculations and reading in a other thread
    /// than UI thread.and for getting back those values and show them on UI
    /// thread invoking is required.
    /// </summary>
    public void UpdatePlot()
    {

        if (plotView1.InvokeRequired)
        {
            plotView1.Invoke((MethodInvoker)UpdatePlot);
            //lbPoints.Invoke((MethodInvoker)UpdatePlot);

        }
        else
        {
            //while (series1.Points.Count > 0)
            //{

            //}
            if (series1.Points.Count > 0)
                series1.Points.Clear();

            if (myModel.Series.Count > 0)
                myModel.Series.Clear();


            string num = series1.Points.Count.ToString();
            lbPoints.Text = series1.Points.Count.ToString();
            //myModel.Series.Add(series1);

            for (int i = 0; i < SampleCont.Length; i++)
            {
                series1.Points.Add(new OxyPlot.DataPoint(sampleTimeCont[i], SampleCont[i]));
            }

            myModel.Series.Add(series1);

            //plotView1.Refresh();
            plotView1.InvalidatePlot(true);

        }
    }

Проблема в том, что по истечении таймера некоторые данные собираются в цикле for. и когда таймер снова включается, петля продолжает накапливаться. Это приведет к новым + старым значениям в SampleCont . поэтому вместо этого я должен сделать то, что мне нужно построить график от _startIndex до _sampleCount в первый раз. В следующий раз будет новое значение _sampleCount (это изменяющаяся переменная, которая говорит, сколько выборок имеется в данный момент). поэтому мне нужно сообщить программе, что на этот раз _startIndex должно быть равно старому значению _sampleCount, а _sampleCount на этот раз должно быть new _sampleCount - old _sampleCount. и построить его. Я действительно не знаю, как сказать сюжету сделать это. потому что _sampleCount каждый раз обновляется.


person Peppe    schedule 08.02.2018    source источник


Ответы (1)


Просто используйте общий список для хранения старых значений _sampleCount.

person Spirit Pony    schedule 08.02.2018