C#实现chart控件动态曲线绘制

本文介绍了如何使用C#实现chart控件动态曲线绘制,通过创建队列和timer控件来实时更新数据,展示动态监测的效果。尽管代码为了监测四个点而重复,但作者建议使用四个线程优化,并提及了数据来源于Oracle数据库。最后,作者表示该方法适用于曲线随日期动态增加的场景,并计划进一步优化图表的视觉效果。
摘要由CSDN通过智能技术生成

C#实现chart控件动态曲线绘制

思想

实验室要做一个动态曲线绘制,网上方法很多,但是缺乏完整代码和效果图的整合,往往总是缺少其一,因此整理如下,方便大家编程,节约时间。

思路:新建一个队列,利用timer控件,动态的往队列中加入数据,每次触发事件,就相当于将队列中的值全部重新画一遍。

我的目的是做四个点的动态监测,所以代码重复了四次,其实应该用4个线程来做,思路就显得较为清晰了,这也是可以改进的地方。

public partial class 界面_Xtratabcontrol版本_ : Form
    {
        private Queue<double> dataQueue1 = new Queue<double>(100); //30个就清空一次
        private Queue<double> dataQueue2 = new Queue<double>(100); //30个就清空一次
        private Queue<double> dataQueue3 = new Queue<double>(100); //30个就清空一次
        private Queue<double> dataQueue4 = new Queue<double>(100); //30个就清空一次
        private int stress1 = 0;//设置一个压力值全局变量
        private int stress2 = 0;//设置一个压力值全局变量
        private int stress3 = 0;//设置一个压力值全局变量
        private int stress4 = 0;//设置一个压力值全局变量
        string monthNow = "";
        string monthNext = "";
        string currentTime = "";
        bool isRefresh = false;
        public 界面_Xtratabcontrol版本_()
        {
            InitializeComponent();
            dataGridView1.AutoGenerateColumns = false; //设置不自动显示数据库中未绑定的列
            //设置隔行背景色
            this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Bisque;
            this.dataGridView1.AlternatingRowsDefaultCellStyle.BackColor = Color.Beige;
        }

        private void btnInit_Click(object sender, EventArgs e)
        {
            InitChart1();
            InitChart2();
            InitChart3();
            InitChart4();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            this.timer1.Start();
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            this.timer1.Stop();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            try
            {
                UpdateDate(); //根据当前时间取下一个数据,同时给month赋值
                dataQueue1.Enqueue(stress1); //就是这,不断往里面加数据。
                dataQueue2.Enqueue(stress2);
                dataQueue3.Enqueue(stress3);
                dataQueue4.Enqueue(stress4);
                if (isRefresh)
                {
                    //刷新界面
                    isRefresh = false;
                    InitChart1();
                    InitChart2();
                    InitChart3();
                    InitChart4();
                    dataQueue1.Enqueue(stress1);
                    dataQueue2.Enqueue(stress2);
                    dataQueue3.Enqueue(stress3);
                    dataQueue4.Enqueue(stress4);
                }
                this.chart1.Series[0].Points.Clear();
                this.chart2.Series[0].Points.Clear();
                this.chart3.Series[0].Points.Clear();
                this.chart4.Series[0].Points.Clear();
                for (int i = 0; i < dataQueue1.Count; i++)
                {
                    this.chart1.Series[0].Points.AddXY((i + 1), dataQueue1.ElementAt(i)); 相当于每次都是重新画一遍
                }
                for (int i = 0; i < dataQueue2.Count; i++)
                {
                    this.chart2.Series[0].Points.AddXY((i + 1), dataQueue2.ElementAt(i)); 相当于每次都是重新画一遍
                }
                for (int i = 0; i < dataQueue3.Count; i++)
                {
                    this.chart3.Series[0].Points.AddXY((i + 1), dataQueue3.ElementAt(i)); 相当于每次都是重新画一遍
                }
                for (int i = 0; i < dataQueue4.Count; i++)
                {
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值