准备一个listview(显示进程)和三个button(运行、结束、更新进程)就行了,其中ListView加上7个(当然你可以加更多)ColumnHeader 标识进程的属性.
private void UpDateProcess() //显示进程
{
string ProcessName;
int ProcessID;
int ThreadNumber;
System.TimeSpan CPUTime;
int Memory;
int ProrityNumber;
DateTime StartTime;
Process[] ps = Process.GetProcesses();
if(this.listView1!=null)
{
this.listView1.Items.Clear();
}
for(int i=0;i<ps.Length;i++)
{
ProcessName=ps[i].ProcessName;
ProcessID =ps[i].Id;
ThreadNumber=ps[i].Threads.Count;
CPUTime =ps[i].TotalProcessorTime;
Memory =ps[i].WorkingSet;
ProrityNumber=ps[i].BasePriority;
StartTime=ps[i].StartTime;
string proir="";
if(ProrityNumber==13){proir="高";};
if(ProrityNumber==4){proir="低";};
if(ProrityNumber==8){proir="标准";};
if(ProrityNumber==24){proir="实时";};
string [] subItems=
{ProcessName,
ProcessID.ToString(),
ThreadNumber.ToString(),
String.Format("{0:00}:{1:00}:{2:00}",CPUTime.Hours,CPUTime.Minutes,CPUTime.Milliseconds),
String.Format("{0:#,#,#}K",Memory/1024),
proir,
StartTime.ToLongTimeString()
};
ListViewItem item = new ListViewItem(subItems);
this.listView1.Items.AddRange(new ListViewItem[] {item});
}
statusBarPanel1.Text="当前进程总数: "+ps.Length;//这个是状态橍
}
private void OpenNewProc_Click(object sender, System.EventArgs e) //运行新进程的button事件
{
OpenFileDialog ofd =new OpenFileDialog();
ofd.Filter="可执行文件(*.exe)|*.exe|所有文件(*.*)|*.*";
if(ofd.ShowDialog()==DialogResult.OK)
{
try
{
Process nps = Process.Start(ofd.FileName);
nps.EnableRaisingEvents=true;
nps.Exited+=new EventHandler(nps_Exited);
UpDateProcess();
}
catch(ArgumentException err)
{
MessageBox.Show("出错了:"+err.Message,"警告",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
private void KillProc_Click(object sender, System.EventArgs e) //结束进程的button事件
{
if(this.listView1.SelectedItems.Count>0)
{
int PID = int.Parse(this.listView1.SelectedItems[0].SubItems[1].Text);
Process selectedPID =Process.GetProcessById(PID);
selectedPID.Exited+=new EventHandler(selectedPID_Exited);
if(!selectedPID.HasExited)
{
if(!selectedPID.CloseMainWindow())
{
try
{
selectedPID.Kill();
UpDateProcess();
}
catch(Exception err)
{
MessageBox.Show(err.Message,"不能结束进程",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
else
{
UpDateProcess();
}
}
else
{
MessageBox.Show("请选择一个进程","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
}
结束进程button事件和nps_Exited与selectedPID_Exited两个委托事件的代码都一样调用UpDateProcess() 过程