我在同一个tick事件中放置两个进度条时遇到了一些麻烦。第二个进度条加载到0%或100%,并且这两个值之间没有任何内容。这是我到目前为止的代码。
void timeElapsed(object sender, EventArgs e)
{
progressBar1.Value = (int)(power.BatteryLifePercent * 100);
label1.Text = string.Format("{0}%", (power.BatteryLifePercent * 100));
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
var unused = cpuCounter.NextValue();
progressBar2.Value = (int)(cpuCounter.NextValue());
label2.Text = "CPU " + progressBar2.Value.ToString() + "%";
}
第一个进度条加载正常且电池百分比正确,但第二个进度条始终为100%或0%。
答案 0 :(得分:0)
你不应该连续两次读取计数器而不等待至少1秒钟。如果您在方法中删除了对cpuCounter.NextValue()
的第一次调用,则一切都应该开始正常工作,否则第二次调用总是返回0或100,正如我的测试显示的那样。据我所知,你不会在任何地方使用这个价值。
像这样改变你的方法,它应该有效:
void timeElapsed(object sender, EventArgs e)
{
progressBar1.Value = (int)(power.BatteryLifePercent * 100);
label1.Text = string.Format("{0}%", (power.BatteryLifePercent * 100));
cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";
//var unused = cpuCounter.NextValue();
progressBar2.Value = (int)(cpuCounter.NextValue());
label2.Text = "CPU " + progressBar2.Value.ToString() + "%";
}
我从MSDN documentation得到了我的信息:
如果计数器的计算值取决于两个计数器读数,则 第一次读取操作返回0.0。重置性能计数器 指定不同计数器的属性相当于创建一个 新的性能计数器,以及使用新的第一个读取操作 属性返回0.0。呼叫之间建议的延迟时间 NextValue方法是一秒钟,以允许计数器执行 下一次增量阅读。
如前所述,第一个电话仍会返回0。