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获取权限的方法