本人是一菜鸟,同步异步、多线程什么的现在还模模糊糊的,最近书上看到一个异步回调的例子,感觉用在这里挺好,经过试验比直接开线程不停的获取显示要好得多,发出来献丑了,该实例有个Bug:关闭的时候会出异常,我没找到方法解决,最后只好用 关闭时先visable=false,再Thread.Sleep(3000) ,望高手赐教
public Form1()
{
InitializeComponent();
Thread thread = new Thread(ShowInfo);
thread.Start();
}
private delegate float GetValue();
private static GetValue deleGetCpu = UsedCpupercents;
private static GetValue deleGetMemory = UsedMemoryPercents;
private static float UsedMemoryPercents() // 已使用内存百分比
{
float totalMemory = float.Parse(PCInfo.GetTotalPhysicalMemory());
float freeMemory = float.Parse(PCInfo.GetFreePhysicalMemory());
float usedperts = 100 - (freeMemory/totalMemory)*100;
return usedperts;
}
private static float UsedCpupercents() //已使用的CPU百分比
{
return float.Parse(PCInfo.GetCpuUsedPercents());
}
private void ShowCPU(IAsyncResult result) //显示出当前CPU使用信息,这里的circularGauge1为引用的DevExpress控件,得到了值可以使用其他方法达到显示的目的
{
float percents = deleGetCpu.EndInvoke(result);
circularGauge1.Scales[0].Value = percents;
}
private void ShowMemory(IAsyncResult result) //显示当前内存使用信息,同上
{
float percents = deleGetMemory.EndInvoke(result);
linearGauge1.Scales[0].Value = percents;
}
private void ShowInfo()
{
while(true)
{
Thread.Sleep(1000); // 查询间隔
deleGetCpu.BeginInvoke(ShowCPU, null);
deleGetMemory.BeginInvoke(ShowMemory, null);
}
}