c# 实时曲线图示例代码

下面是详细的“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日

相关文章

  • C#中使用Cache框架快速实现Cache操作

    下面我来详细讲解一下“C#中使用Cache框架快速实现Cache操作”的完整攻略。 1. Cache框架简介 Cache框架是一个ASP.NET的缓存库,它提供了可配置的缓存服务,可以加速Web应用程序以及数据访问操作。使用Cache框架,我们可以快速实现简单而高效的Cache操作。 2. 安装Cache框架 首先,我们需要安装Cache框架。可以通过NuG…

    C# 2023年6月3日
    00
  • C#实现的SN快速输入工具实例

    C#实现的SN快速输入工具实例 本文将详细讲解如何使用C#语言实现一个SN快速输入工具。在过程中,我们会使用到C# WinForm应用程序的知识,涉及到处理键盘事件、剪贴板操作、字符串处理等技术。 示例说明 在这个示例中,我们将实现一个快速输入工具,用户可以通过输入预设好的SN码来快速填写表格中的SN信息。例如,当用户在键盘上输入“SN001”,工具会自动将…

    C# 2023年6月6日
    00
  • c#的异或运算符介绍

    C#的异或运算符介绍 什么是异或运算符? 异或运算符是一种二进制运算符,用符号 ^ 表示。它的作用是将两个二进制数的每一位进行比较,如果相应位相同则结果为0,否则结果为1。 具体地,异或运算符有以下规则: a b a^b 0 0 0 0 1 1 1 0 1 1 1 0 如何在C#中使用异或运算符? 在C#中,异或运算符可以用于整型、长整型、短整型等基本数据类…

    C# 2023年6月7日
    00
  • C#读写config配置文件的方法

    以下是关于C#读写config配置文件的完整攻略。 1. 创建配置文件 首先,我们需要创建一个配置文件,可以使用Visual Studio自带的配置管理器创建,也可以手动创建一个XML文件并修改后缀为.config。下面是一个简单的配置文件示例: <?xml version="1.0" encoding="utf-8&qu…

    C# 2023年6月1日
    00
  • 一个可用于生产项目 基于 .NET 6 自研ORM

    Fast Framework 作者 Mr-zhong 代码改变世界…. 一、前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer Oracle MySql PostgreSql Sqlite 优点: 体积小、可动态切换不同实现类库、原生支持微软特性、流畅API、使用简单、性能高、模型数据绑定…

    C# 2023年4月22日
    00
  • C#设置输入法实例分析

    C#设置输入法实例分析 概述 输入法是计算机上常用的工具,而在编写一些需要进行输入的程序时,需要对输入法进行设置。本文将详细讲解如何在C#程序中进行输入法设置。 获取当前输入法 在C#中,可以通过以下代码获取当前正在使用的输入法: System.Windows.Forms.InputLanguage currentInputLanguage = System…

    C# 2023年6月7日
    00
  • 在.NET Core使用 HttpClient 的正确方式

    前言 HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。它是我们比较常用的官方HTTP请求组件,那么你们都正确…

    C# 2023年4月17日
    00
  • c#处理3种json数据的实例

    C#处理3种JSON数据的实例 在C#中,JSON是一种常见的数据格式,可以使用Newtonsoft.Json库来处理JSON数据。本文将提供3个示例,演示如何处理3种不同类型的JSON数据。 示例1:处理简单的JSON对象 以下示例演示如何处理简单的JSON对象: using Newtonsoft.Json.Linq; using System; name…

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