winform 获取CPU占用率 永远为0

icyblood198999 2014-08-06 04:14:01
 PerformanceCounter pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");
//pcCpuLoad.MachineName = ".";
float cpuStr = pcCpuLoad.NextValue();


如代码,最后cpuStr的值为0,是不是需要某种权限或是其他原因?
...全文
237 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZhongGuanYao 2014-08-06
  • 打赏
  • 举报
回复
CPU占用率的值是随时间变化而变化的,不能只获取一个值,应该在某一时间段内连续获取它的值 //点击开始按钮 private void btnStart_Click(object sender, EventArgs e) { PerformanceCounter pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total"); Thread newThread = new Thread(GetCpuLoad); newThread.Start(pcCpuLoad);//启动一个新线程读取CPU占用率 } //读取CPU占用率并显示 private void GetCpuLoad(object obj) { PerformanceCounter pcCpuLoad = (PerformanceCounter)obj; SetLabelTextDelegate setLabelTextDelegate = new SetLabelTextDelegate(SetLabelText); while (true) { Thread.Sleep(1000);//每隔一秒读取一次值 float cpuLoad = pcCpuLoad.NextValue(); this.Invoke(setLabelTextDelegate, new object[] { cpuLoad + "%" });//UI线程显示结果 } } delegate void SetLabelTextDelegate(string text); private void SetLabelText(string text)//label1显示CPU占用率 { label1.Text = text; }
gomoku 2014-08-06
  • 打赏
  • 举报
回复
取样不要太快,间隔1秒或以上比较好。保持一个pcCpuLoad实例,而不是多次创建。
icyblood198999 2014-08-06
  • 打赏
  • 举报
回复
引用 1 楼 gomoku 的回复:
有些指标需要至少调用两次(第一次初始话);

float cpuStr = pcCpuLoad.NextValue();
cpuStr = pcCpuLoad.NextValue();  // <--再调用一次。
如此做之后,只有第一次运行为100%,之后也均为0
gomoku 2014-08-06
  • 打赏
  • 举报
回复
有些指标需要至少调用两次(第一次初始话);

float cpuStr = pcCpuLoad.NextValue();
cpuStr = pcCpuLoad.NextValue();  // <--再调用一次。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧