gpt4 book ai didi

c# - 使用图表显示我在 WPF 上每秒更新的数据

转载 作者:行者123 更新时间:2023-11-30 18:30:07 25 4
gpt4 key购买 nike

我正在尝试获取每秒的 CPU 使用率。我为此设置了代码,所以没有问题。我试图在折线图上表示此信息。我正在使用 wpf 工具包。我打算让图表有点类似于下图。包含秒数的 y 轴,包含 cpu 使用率的 x 轴。

所以它就像秒数和 cpu 使用率在图表上不断更新。 (如果这不是一个好方法,我想要一些关于在图表上显示我的 CPU 使用率的更好方法的建议。)

enter image description here

我正在尝试找到一种方法来设置我的 dispatcherTimer,它每秒滴答一次以在 y 轴上更新。

这是我当前图表的样子。

enter image description here

我对此一无所知,但我真的不确定如何将其设置为我正在寻找的东西。我相信我必须处理 pointcollection 值,但不能直接用 timer.tick (dispatchtimer) 替换数字。

图表代码如下:

<chartingToolkit:Chart Canvas.Left="25" Canvas.Top="307" Title="CPU Usage">
<chartingToolkit:Chart.DataContext>
<PointCollection>1,10 2,20 3,30 4,40</PointCollection>
</chartingToolkit:Chart.DataContext>
<chartingToolkit:LineSeries DependentValuePath="X" IndependentValuePath="Y" ItemsSource="{Binding}" Title="Cpu Usage">
<chartingToolkit:LineSeries.Background>
<RadialGradientBrush Center="0.075,0.015" GradientOrigin="-0.1,-0.1" RadiusY="0.9" RadiusX="1.05">
<GradientStop Color="#FFA9A3BD"/>
<GradientStop Color="#FF6C5B2C" Offset="1"/>
</RadialGradientBrush>
</chartingToolkit:LineSeries.Background>
</chartingToolkit:LineSeries>
</chartingToolkit:Chart>

我知道这个问题很可能不清楚,但我不知道该怎么说。我也找不到任何指南引用。如果这有助于更好地理解,我可以发布检索 CPU 使用率结果(每秒)的代码。不想用太多信息来解决这个问题。感谢您的指导。

计算每秒 CPU 使用率的代码:

class Monitor
{
Stats stats = new Stats();

public delegate void CPUEventHandler(object sender, CPUEventArgs args);
public event CPUEventHandler CPUEvent;

DispatcherTimer timer = new DispatcherTimer();

private static double cpuCurrent;

public Monitor()
{
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += TimeChanged;
timer.Start();
}

void TriggerCPUEvent(CPUEventArgs args)
{
if (CPUEvent != null)
{
CPUEvent(this, args);
}
}

public void TimeChanged(object sender, EventArgs e)
{
cpuCurrent = stats.GetCurrentCpuUsage();

TriggerCPUEvent(new CPUEventArgs(cpuCurrent));
}
}

class Stats
{
private PerformanceCounter cpuCounter;

public Stats()
{
cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");
}

public float GetCurrentCpuUsage()
{
return cpuCounter.NextValue();
}
}

最佳答案

  1. 定义数据模型以提供图表(在最简单的情况下为 ObservableCollection)
  2. 在每次引发 TriggerCPUEvent 时添加一些逻辑来更新上面的集合(从普通事件处理程序到 Reactive Extensions 聚合的各种选项)- 注意你的集合的大小,因为如果你允许你的 WPF Chart 不会表现很好收集无限增长
  3. 将您的线系列绑定(bind)到底层集合,瞧!

如果您需要显示更大的数据 block 并保持良好的 UI 响应水平,请考虑编写您自己的直接与 DrawingContext 交互的图表控件 - WPF 工具包图表不是性能最高的图表

关于c# - 使用图表显示我在 WPF 上每秒更新的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21953512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com