这几天看到Process组件,挺感兴趣的,所以做了这么一个东东,到不是为了别的什么,算是熟悉一下Process提供的各种属性和方法吧。程序很简单,得益于Process封装了很多有用的方法,直接调用就可以了,前提当然是你得熟悉哪个属性代表什么意思哪个方法是干吗的啦'。窗体上主要用istView控件来枚举进程及其相关信息,有两个问题还未解决,有高手路过望不惜赐教。
第一个问题是模拟实现longhorn任务管理器的打开进程所在目录时只能打开到进程所在目录的文件夹,还差一步选定进程文件,怎么实现?
另一个问题是程序中利用一个定时器来自动更新进程列表信息,获取系统所有进程信息的这段代码如下:
//获得当前所有进程信息并填充ListView
private void GetCurrentInfo()
{
processList.Items.Clear();
myProcess = Process.GetProcesses();
foreach (Process pr in myProcess)
{
pr.Refresh();
string[] str = {
pr.ProcessName,
pr.Id.ToString(),
pr.TotalProcessorTime.ToString().Substring(0,8),
((double)pr.WorkingSet/1024).ToString("0.##") + " K",
((double)pr.VirtualMemorySize/1024).ToString("0.##") + " K",
pr.BasePriority.ToString(),
pr.Responding==true?"正在运行":"失去响应"
};
processList.Items.Add(new ListViewItem(str));
}
}
正如上所写,每次更新前先清空listView中的所有项,然后重新获得当前所有进程信息并枚举填充,这样带来的问题是会丢失更新前listview的selectIndex,由此引发其它一系列依赖于selectIndex的操作的问题。有什么好的办法能让ListView不用全部清除而直接更新?
截图:
代码下载: