我想做个关于类似与任务管理器的东西,在获得占用cpu工作时间(processes[i].TotalProcessorTime)时出现问题,而其他的属性方法没有错误,是这个用错了,还是其他原因??我把出现错误的两句注释上了,
急等高手指点
具体:
string processName; //进程名
int processID; //进程ID
int threadNumber; //线程数(每个进程占用的线程数)
TimeSpan cpuTime; //占用CPU时间
int memory; //占用的物理内存
int priorityNumber; //优先级
DateTime startTime; //启动时间
//获取当前系统中的所有进程
Process[] processes = Process.GetProcesses();
//清除列表视图中原有的内容
if (this.listView1 != null)
{
this.listView1.Items.Clear();
}
//在列表中加入每个进程项目的详细信息
for (int i = 0; i < processes.Length; i++)
{
processName = processes[i].ProcessName;
processID = processes[i].Id;
threadNumber = processes[i].Threads.Count;
//cpuTime = processes[i].TotalProcessorTime; //提示出现错误!!!!!!
memory = processes[i].WorkingSet;
priorityNumber = processes[i].BasePriority;
//startTime = processes[i].StartTime; //也提示出现错误!!!!!!
startime = "未开发00:00";
string prior = "";
//判断优先级的值
if (priorityNumber == 13) { prior = "高"; };
if (priorityNumber == 4) { prior = "低"; };
if (priorityNumber == 8) { prior = "标准"; };
if (priorityNumber == 24) { prior = "实时"; };
//进程信息
string[] subItems ={
processName,
processID.ToString(),
threadNumber.ToString(),
String.Format("{0:00}:{1:00}:{2:00}",
cpuTime.Hours, cpuTime.Minutes, cpuTime.Seconds),
String.Format("{0:#,#,#}K", memory / 1024),
prior,
startTime.ToLongTimeString()
};
//构造一项并插入
ListViewItem item = new ListViewItem(subItems);
this.listView1.Items.Insert(i, item);(今天5.1送上51分)
在可是vs2005中不行,刚开始提示,用什么什么替代,后来提示拒绝访问,
???
在msdn上找的也是这个属性,没有找到什么替代的东西^^^^^^^^^^^^^^^^^^
谢谢powerlee2008,谢谢你拿时间帮我测试
{
cpuTime = processes[i].TotalProcessorTime;
}
原因: 在.Net2下,系统的“空闲进程”的总CPU用时是不能查询的。空闲进程(System Idle Process)并不是一个真正的进程。它的进程ID=0。你绕过它就可以了。