這幾天看到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不用全部清除而直接更新?
截圖: