我想做个关于类似与任务管理器的东西,在获得占用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分)

解决方案 »

  1.   

    我在vs2003 framework 1.1下测试LZ的代码,没有问题。
      

  2.   

    对,我这些也是在介绍vs2003 framework 1.1的地方找的,
    在可是vs2005中不行,刚开始提示,用什么什么替代,后来提示拒绝访问,
    ???
    在msdn上找的也是这个属性,没有找到什么替代的东西^^^^^^^^^^^^^^^^^^
    谢谢powerlee2008,谢谢你拿时间帮我测试
      

  3.   

    if (processes[i].Id != 0)                          //<------
    {
      cpuTime = processes[i].TotalProcessorTime; 
    }
    原因: 在.Net2下,系统的“空闲进程”的总CPU用时是不能查询的。空闲进程(System Idle Process)并不是一个真正的进程。它的进程ID=0。你绕过它就可以了。
      

  4.   

    谢谢,gomoku ,这样可以,还有个小问题,如果为空的话,赋个默认值,应该是什么样的呢?怎么写,