c# 实时曲线图示例代码

yizhihongxing

下面是详细的“c# 实时曲线图示例代码”攻略。

简介

实时曲线图常用于数据采集与监控领域,其实现方法主要通过定时器事件或者数据缓存方式进行数据刷新。在c#中可以使用WPF或WinForm两种方式实现绘制实时曲线。

在实现实时曲线之前,我们需要掌握以下知识点:

  • 定时器
  • 数据缓存
  • 绘制曲线

实现方法

使用定时器实现

  1. 创建WinForm或WPF项目,并添加图表控件。

  2. 添加定时器控件,并设置定时器的时间间隔。

  3. 在代码中定义数据源和定时器事件:

private List<double> dataList = new List<double>();
private Timer timer;
private void InitTimer(){
    timer = new Timer();
    timer.Interval = 1000;
    timer.Tick += Timer_Tick;
    timer.Start();
}

private void Timer_Tick(object sender, EventArgs e){
    //获取最新的数据(可通过串口、socket等方式获取)
    //将最新数据添加到数据源中
    dataList.Add(1.0);
    chart1.Series[0].Points.Clear();
    for (int i = 0; i < dataList.Count; i++) {
        chart1.Series[0].Points.AddY(dataList[i]);
    }
    //绘制图形
    chart1.Invalidate();
}
  1. 将数据源绑定到图形控件,并绘制出来:
private void Form_Load(object sender, EventArgs e)
{
    chart1.Series.Clear();
    chart1.Series.Add(new Series());
    chart1.Series[0].ChartType = SeriesChartType.Line;
}

使用数据缓存实现

  1. 创建WinForm或WPF项目,并添加图表控件。

  2. 在代码中定义数据源和绘制事件:

private List<double> dataList = new List<double>();
private void DrawChart(){
    //绘制图形
    chart1.Series[0].Points.Clear();
    for (int i = 0; i < dataList.Count; i++){
        chart1.Series[0].Points.AddY(dataList[i]);
    }
}

private void DataReceived(double data){
    //将最新数据添加到数据源中
    dataList.Add(data);
    //绘制图形
    DrawChart();
}
  1. 在数据源更新时触发数据缓存的更新事件,并绘制实时曲线:
//数据缓存类
public class DataBuffer{
    private List<double> dataList;
    private int bufferCount;
    private Action<double> OnDataReceived;

    public DataBuffer(int count, Action<double> onDataReceived){
        dataList = new List<double>();
        bufferCount = count;
        OnDataReceived = onDataReceived;
    }

    public void Push(double value){
        if(dataList.Count >= bufferCount){
            dataList.RemoveAt(0);
        }
        dataList.Add(value);
        OnDataReceived?.Invoke(value);
    }
}

//窗口加载事件
private void Form_Load(object sender, EventArgs e){
    chart1.Series.Clear();
    chart1.Series.Add(new Series());
    chart1.Series[0].ChartType = SeriesChartType.Line;

    var buffer = new DataBuffer(10, DataReceived);
    //模拟数据获取
    Task.Run(async () => {
        while(true){
            buffer.Push(1.0);
            await Task.Delay(1000);
        }
    });
}

示例说明

示例1

在WinForm项目中,实现绘制实时CPU利用率曲线图。

  1. 创建WinForm项目。

  2. 添加Chart控件和定时器控件。

  3. 在MainForm.cs中添加如下代码:

public partial class MainForm : Form{
    private PerformanceCounter counter;
    private List<float> dataList = new List<float>();
    private Timer timer;

    public MainForm(){
        InitializeComponent();
        InitTimer();
        InitCounter();
    }

    private void InitCounter(){
        counter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
        //初始化性能计数器
        counter.NextValue();
    }

    private void InitTimer(){
        timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += Timer_Tick;
        timer.Start();
    }

    private void Timer_Tick(object sender, EventArgs e){
        float cpuUsage = counter.NextValue();
        dataList.Add(cpuUsage);
        chart1.Series[0].Points.Clear();
        for (int i = 0; i < dataList.Count; i++) {
            chart1.Series[0].Points.AddY(dataList[i]);
        }
        chart1.Invalidate();
    }

    private void MainForm_Load(object sender, EventArgs e){
        chart1.Series.Clear();
        chart1.Series.Add(new Series());
        chart1.Series[0].ChartType = SeriesChartType.Line;
        chart1.ChartAreas[0].AxisY.Minimum = 0;
        chart1.ChartAreas[0].AxisY.Maximum = 100;
    }
}
  1. 运行程序,可以看到实时CPU利用率曲线图。

示例2

在WPF项目中,实现绘制实时股票价格曲线图。

  1. 创建WPF项目。

  2. 添加Chart控件和定时器控件。

  3. 在MainWindow.xaml.cs中添加如下代码:

public partial class MainWindow : Window{
    private List<double> dataList = new List<double>();
    private Timer timer;

    public MainWindow(){
        InitializeComponent();
        InitTimer();
    }

    private void InitTimer(){
        timer = new Timer();
        timer.Interval = 1000;
        timer.Tick += Timer_Tick;
        timer.Start();
    }

    private void Timer_Tick(object sender, EventArgs e){
        Random random = new Random();
        double price = random.NextDouble() * 100;
        dataList.Add(price);
        chart.Series[0].Points.Clear();
        for (int i = 0; i < dataList.Count; i++) {
            chart.Series[0].Points.AddY(dataList[i]);
        }
        chart.InvalidateVisual();
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e){
        chart.Series.Clear();
        chart.Series.Add(new Series());
        chart.Series[0].ChartType = SeriesChartType.Line;
        chart.ChartAreas[0].AxisY.Minimum = 0;
        chart.ChartAreas[0].AxisY.Maximum = 100;
    }
}
  1. 运行程序,可以看到实时股票价格曲线图。

结语

本文通过说明c#实时曲线图实现的两种方式,通过两个不同的实例代码来说明。

在使用实时曲线图的时候,需要注意数据源的更新和图形的绘制。此外,如果需要显示大量的数据,需要合理地进行数据采样和缩放,保证曲线的实时性和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 实时曲线图示例代码 - Python技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • Asp.Net Core7 preview4限流中间件新特性详解

    Asp.Net Core7 preview4限流中间件新特性详解 在Asp.Net Core7 preview4中,新增了限流中间件的新特性,可以帮助我们更好地控制应用程序的流量。本攻略将深入探讨Asp.Net Core7 preview4限流中间件的新特性,并提供两个示例说明。 安装限流中间件 在Asp.Net Core7 preview4应用程序中,您需…

    C# 2023年5月17日
    00
  • C# jpg缩略图函数代码

    下面详细讲解一下“C# jpg缩略图函数代码”的完整攻略。 简介 在web开发中,我们通常需要对图片进行缩略操作以提升页面加载速度和用户的浏览体验。下面介绍一下如何使用C#代码实现对jpg格式的图片进行缩略操作。 步骤 第一步:引用命名空间 首先需要引用命名空间 System.Drawing,该命名空间提供了在图像操作方面非常强大的支持。 using Sys…

    C# 2023年6月7日
    00
  • C#实现图书管理系统

    C# 实现图书管理系统 在本篇攻略中,我们将演示如何使用 C# 实现一个图书管理系统。该系统的功能如下: 添加图书:包括书名、作者、出版社、出版日期、价格等信息; 删除图书; 修改图书信息; 查询图书信息:查询所有图书或根据书名或作者进行模糊查询; 显示所有图书; 技术栈 C#:一种面向对象的编程语言; Windows Forms:一种基于 Windows …

    C# 2023年5月31日
    00
  • 关于数据库中保留小数位的问题

    那么我将为你详细讲解“关于数据库中保留小数位的问题”的完整攻略。 什么是小数位? 在计算机中,小数位指的是数值的小数部分,也叫做小数点后的位数。例如,对于数值 3.14159,小数位为5。 为什么要保留小数位? 在一些需要精确计算的场合,如财务计算、科学计算等领域,需要保留小数位,以确保计算结果的精确性。 数据库中的小数位处理 在数据库中,对于需要保留小数位…

    C# 2023年5月31日
    00
  • asp.net实现将ppt文档转换成pdf的方法

    将 ppt 文档转换成 PDF 是一个常见的需求,以下是 asp.net 实现将 ppt 文档转换成 PDF 的方法的完整攻略。 步骤 1:安装 Microsoft PowerPoint Interop 首先,您需要安装 Microsoft PowerPoint Interop 来处理 ppt 文件。通过安装 PowerPoint Interop,您可以将 …

    C# 2023年6月1日
    00
  • ASP.NET Ref和Out关键字区别分析

    ASP.NET中的Ref和Out关键字都是用来传递参数的,但它们之间的区别是很明显的。 Ref关键字 Ref关键字用于向方法中传递参数。使用该关键字传递参数意味着你正在传递参数的引用(内存地址),而不是参数本身。因此,任何对参数的更改也会对变量本身产生影响。 Ref示例: public void Modify(ref int num) { num += 10…

    C# 2023年5月31日
    00
  • win8 Could not load type System.ServiceModel.Activation.HttpModule 错误解决方案

    下面是关于“win8CouldnotloadtypeSystem.ServiceModel.Activation.HttpModule错误解决方案”的完整攻略,包含两个示例。 1. 错误描述 在Windows 8操作系统上,当使用IIS 8.0托管WCF服务时,可能会出现以下错误: Could not load type ‘System.ServiceMod…

    C# 2023年5月15日
    00
  • C#模拟实现鼠标自动点击与消息发送功能

    C#模拟实现鼠标自动点击和消息发送是一种常见的自动化操作,可以用来提高代码的效率,下面是关于实现这一功能的攻略。 准备条件 在实现鼠标自动点击和消息发送之前,需要确保以下条件: 熟练掌握C#编程语言的基础知识; 熟悉.NET框架的基本知识和相关API; 了解鼠标点击和消息发送的基础原理。 实现步骤 鼠标自动点击 鼠标自动点击需要用到user32库,通过调用其…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部