如何使用c#每2分钟更新一次MS图表?

时间:2016-04-25 13:11:37

标签: c#

我试图在我的Windows应用程序中每隔一秒绘制一个带有实时数据的折线图。为此,我需要为图表设置最小值(0秒)和最大值(10分钟)。 10分钟后,最小值为10分钟,最大值为20分钟。所以我每次都要显示10分钟的数据。我需要从一开始就用滚动条显示以前的数据。

我尝试了以下代码,但我能够适应图表的前两帧。这意味着例如0-10分钟和10-20分钟。之后我无法拟合最小值和最大值(在调试时,获取正确的值,但图表未使用最近的最大最大值更新)。我不明白哪里我做错了。我是MS图表控件的新手。请指导我。

int i1=0,i2=120,count=0;
  double min,max;

  private void timer1_Tick(object sender, EventArgs e)
  {
         chart1.Invoke(addDataDel);
         count++;
  }
  public void AddData()
  {        
        xvalue = getX(count);
        yvalue = getY(count + 1);

        foreach (Series ptSeries in chart1.Series)
        {
            AddNewPoint(timeStamp, ptSeries,xvalue,yvalue);
        }
  }      
 public void AddNewPoint(DateTime timeStamp, System.Windows.Forms.DataVisualization.Charting.Series ptSeries, double xvalue, double yvalue)
    {          
        // Add new data point to its series.
        ptSeries.Points.AddXY(timeStamp.ToOADate(), xvalue);
        ptSeries.Points.AddXY(timeStamp.ToOADate(), yvalue);         

        if ((count% 600)==0)
        {
            double removeBefore = timeStamp.AddSeconds((double)(600) * (-1)).ToOADate();

            if (ptSeries.Points[0].XValue < removeBefore)
            {
                i2 += 120;
                i1 += 120;

                chart1.ChartAreas[0].CursorX.AutoScroll = true;            
                chart1.ChartAreas[0].AxisX.ScaleView.Zoomable = true;                   
                chart1.ChartAreas[0].AxisX.ScaleView.Size = 120;

                min = ptSeries.Points[0].XValue;
                chart1.ChartAreas[0].AxisX.Minimum = ptSeries.Points[0].XValue;
                chart1.ChartAreas[0].AxisX.Maximum = DateTime.FromOADate(ptSeries.Points[0].XValue).AddMinutes(2).ToOADate();
                //chart1.ChartAreas[0].AxisX.ScaleView.Zoom(chart1.ChartAreas[0].AxisX.Minimum, chart1.ChartAreas[0].AxisX.Maximum);
                min = chart1.ChartAreas[0].AxisX.Minimum;
                max = chart1.ChartAreas[0].AxisX.Maximum;
            }
        }

        if (count >= 600)
        {
            if ((count >= i1) || (count <= i2))
            {
                chart1.ChartAreas[0].AxisX.LabelStyle.Enabled = true;
                chart1.ChartAreas[0].AxisX.ScaleView.Zoom(min, max);
                chart1.ChartAreas[0].AxisX.ScaleView.Position = max;
            }
        }

        chart1.Update();        
        chart1.ChartAreas[0].RecalculateAxesScale();           
    }

0 个答案:

没有答案