winform:进程管理器

webform虽然应用越来越广泛,但winform做出的东西也很实用。比如我们同时按下ctr+shift+esc 三键,我们会发现桌面上多出个什么东东呢?对了就是它!今天又学了一下Diagnostics这个命名空间下的Process类做的进程管理器。

准备一个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()  过程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值