1.设计界面 2.设置变量和list表
public int RunId; public DataGridCellInfo cellinfo; List<Data> list = new List<Data>();3.与datagrid绑定
public class Data { public int Id { get; set; } public string ProcessName { get; set; } public string StartTime { get; set; } public string TotalMemory { get; set; } public string ThreadNum { get; set; } }4.创建Ref方法用来获取进程属性和更新进程表
public void Ref() { dg.ItemsSource = null; Process[] process = Process.GetProcesses(); foreach (Process p in process) { Data data = new Data(); try { data.StartTime = p.StartTime.ToString(); } catch (Exception) { data.StartTime = "无法获取"; } list.Add(new Data() { Id = p.Id, ProcessName = p.ProcessName, StartTime = data.StartTime, TotalMemory = (p.WorkingSet64 / 1024 / 1024).ToString(), ThreadNum = (p.Threads.Count).ToString() }); dg.ItemsSource = list; } }5.调用Ref方法时程序启动时显示进程信息
public MainWindow() { InitializeComponent(); Ref(); }6.设置click事件,鼠标选定datagrid行时返回行信息。Kill方法关闭程序
private void Button_Click(object sender, RoutedEventArgs e) { object temp = this.dg.SelectedItem; Data data = temp as Data; RunId = data.Id; try { Process myprocess = Process.GetProcessById(RunId); myprocess.Kill(); } catch (Exception ex) { MessageBox.Show(ex.Message); } Ref(); }结果:
问题讨论: 1.出现启动时间无法获取情况,最后检查发现是前端绑定名写错。 2.起初获取选定行用的是SelectedCellsChanged 但是在结束进程后用Ref方法刷新列表时因为选定行已不存在而二次使用SelectedCellsChanged出错。 3.为获取更高权限在csdn博客学习了如何开启vs管理员模式。
VS获取权限的方法