我有一个非常简单的C#程序(.NET 4.5,VS 2013)正在使用的WinForms抓住当前的CPU速度和最大CPU速度和更新下列标签运行: lblCPUMaxValue and lblCPUCurrentValueC#GUI冻结当更新标签通过定时器
lblCPUMaxValue
lblCPUCurrentValue
我创建了一个名为timerCPUstats)定时器蜱每3000ms和调用函数updatePerfInfo(:
public uint CPUSpeed()
{
ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
uint speed = (uint)(Mo["CurrentClockSpeed"]);
Mo.Dispose();
return speed;
}
public uint maxCPUSpeed()
{
ManagementObject Mo = new ManagementObject("Win32_Processor.DeviceID='CPU0'");
uint speed = (uint)(Mo["MaxClockSpeed"]);
Mo.Dispose();
return speed;
}
public string formatMhzGhz(uint mhz)
{
decimal ghz = (decimal)mhz/1000;
ghz = Math.Round(ghz, 2);
string stringGhz = ghz.ToString() + " GHz";
return stringGhz;
}
public void updatePerfInfo()
{
lblCPUMaxValue.Text = formatMhzGhz(maxCPUSpeed());
lblCPUCurrentValue.Text = formatMhzGhz(CPUSpeed());
}
的问题是,每一个标签更新程序时几秒钟冻结。它基本上变成了非交互/冻结。有没有解决的办法?
您是否正在运行的WinForms? WPF?您的UI冻结,因为更新UI的相同线程也在运行计算。旋转背景工作者来处理这个问题是适当的。 – paqogomez