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擷取權限的方法