winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法

前言:

大家好,我是上位机马工,硕士毕业4年年入40万,目前在一家自动化公司担任软件经理,从事C#上位机软件开发8年以上!我们在开发winform窗体程序的时候,有时候会往chart控件中添加大量的数据用于显示曲线,当数据太多时,会出现程序界面卡顿甚至软件崩溃的情况,本文就来帮助大家解决这个问题!

1、示例代码

csharp 复制代码
 public partial class Form1 : Form
    {

        List<double> xList = new List<double>();
        List<double> yList = new List<double>();
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Run();
        }
        int maxCount = 10;
        private void Run()
        {
            Random random = new Random();
            int val = random.Next(0, 1000);//生成随机数

            if (yList.Count == maxCount)//判断数量达到上限,则删除一个旧数据
            {
                yList.RemoveAt(0);
            }
            yList.Add(val);
            GetxList();
            UpdateChart();
        }


        /// <summary>
        /// 获取x坐标
        /// </summary>
        private void GetxList()
        {
            xList.Clear();
            int count = yList.Count;
            for (int i = 0; i < count; i++)
            {
                xList.Add(i + 1);
            }
        }

        /// <summary>
        /// 显示曲线
        /// </summary>
        private void UpdateChart()
        {
            this.Invoke(new Action(() =>
            {

                chart1.Series[0].Points.Clear();
                chart1.Series[0].Points.DataBindXY(xList, yList);
            }));
        }
    }

2、删旧添新法

该方法的原理就是,我们设置一个显示数据的上限,比如1000,当曲线显示的数据等于1000时,这时又有新的数据需要显示时,我们先删除一定数量的旧数据,然后添加相等数量的新数据,这样保持显示的数据始终保持在1000个,这样我们就能确保控件不会因为需要显示太多数据而卡顿或者崩溃同时控件显示的数据又是最新的。

3、视频讲解

解决显示大量曲线数据卡顿------删旧添新法

年入30万+C#上位机实战必备教程推荐(点击下方链接即可访问文章)

1、《C#串口通信从入门到精通》

2、《C#与PLC通信从入门到精通 》

3、《C# Modbus通信从入门到精通》

4、《C#Socket通信从入门到精通 》

5、《C# MES通信从入门到精通》

6、《winform控件从入门到精通》

7、《C#操作MySql数据库从入门到精通》

相关推荐
传奇开心果编程6 小时前
【SwiftUI娓娓道来】第3课:让界面活起来——交互与动画指南
学习·macos·ui·ios·swiftui·swift
zhchyun20086 小时前
【Unity UI 进阶】仿 Element UI 打造企业级 Unity UI 组件库(10)
ui·unity·游戏引擎
传奇开心果编程7 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
波力海苔夹心脆6757 小时前
C# 序列化与反序列化详解:System.Text.Json、Newtonsoft.Json、XmlSerializer 用法、特性选项与安全实践
经验分享·后端·c#·json·.net
kiros_wang10 小时前
渐变/阴影/滤镜⾼阶⽤法:统⼀项⽬UI、精简冗余组件
ui·harmonyos
小羊没烦恼!12 小时前
在Scrum中实施敏捷建模
java·开发语言·windows·算法·c#
Lost of 程序猿13 小时前
建造者模式实战:告别“十参数构造函数“的数据导出任务
后端·设计模式·c#·asp.net
mudtools15 小时前
在.NET现有系统中快速集成飞书任务分配能力
后端·c#·.net
沫璃染墨15 小时前
《Qt从零入门系列(十一):Qt事件机制详解——从QEvent到鼠标、键盘与定时器事件》
c++·qt·ui·硬件工程·交互·个人开发·qt5
工具派18 小时前
Word文档太大怎么拆分?段落结构与两种拆法的边界实测
开发语言·c#·word