• 利用winfrom写一个简单的进程监视程序 司令


    由于兴趣爱好,自学c#不到两个月时间,正好赶上公司项目需要,寻找各种技术文章实现了一个简单的进程监视小程序。为自己以后学习回顾作参考了。

    需求:定时对某一进程进行监视,如发现程序关掉后,自动开启该程序,保证业务的正常运行。

    功能划分:1、知道用户选择的什么程序(如果单纯为公司产品服务,可直接指定文件名,方便多了)

                  2、获取用户选择的监视间隔时间

                  3、遍历当前进程,查看软件运行状态。

    具体实现如下:

    第一步:设计程序窗体:

    功能细解:

    北京时间:直接调用本地时间。需要用多线程进行处理。

    程序名称:用户点击浏览弹出对话框,提供更加方便的监视程序的选择。

    加入任务栏:这个板块实际上是为了体验效果,对程序实现并起不了多大作用。后边两个小按钮完全是为了练习checkbox控件而添加的,可以通过button直接实现。

    间隔时间:这个是程序的监视需要间隔的时间段

    开始监视||暂停监视:不解释。

    代码如下:

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Data; using System.Drawing;

    using System.Linq; using System.Text;

    using System.Threading.Tasks;

    using System.Windows.Forms;

    using System.Threading;

    using System.Diagnostics;

    namespace 进程监视如软件

    {    

    public partial class Form1 : Form   

      {        

    public Form1()  

           {          

    InitializeComponent();

                //设置多线程调用异常问题   

              CheckForIllegalCrossThreadCalls = false;

            }      

       /// <summary>        

    /// 打开一个文件浏览对话框,同时将选中的程序路径存入tb_input容器内        

    /// </summary>        

    /// <param name="sender"></param>   

          /// <param name="e"></param>   

          private void button1_Click(object sender, EventArgs e)       

      {           

      OpenFileDialog openfd = new OpenFileDialog();         

        if (openfd.ShowDialog() == DialogResult.OK)        

         {              

       tb_input.Text = openfd.FileName;    

             }      

       }

            private void Form1_Load(object sender, EventArgs e)

            {        

         Thread td = new Thread(new ThreadStart(ShowTime));    

             td.Start();      

       }        

    /// <summary>        

    /// 显示当前时间,使用多线程来操作    

         /// </summary>     

        private void ShowTime()   

          {           

      while (true)         

        {               

                GC.Collect();    //多余的垃圾回收,一般不作处理,.NET自动帮我们处理好了 

                btn_showtime.Text = DateTime.Now.ToString();    

                 Thread.Sleep(1000);        

         }     

        }

            private void Form1_FormClosing(object sender, FormClosingEventArgs e)     

        {         

        //在多线程中结束一切窗体      

           System.Environment.Exit(System.Environment.ExitCode);   

              this.Dispose();    

             this.Close();        

    }

            private void chb_input_CheckedChanged(object sender, EventArgs e)

            {            

    if (tb_input.Text == "")      

           {           

          MessageBox.Show("请选择要监视的程序");        

         }            

    else if (chb_input.Checked)   

              {                

    chb_out.CheckState = CheckState.Unchecked;    

                 rt_box.Text = "1、" + tb_input.Text;     

            }        

    }

            private void chb_out_CheckedChanged(object sender, EventArgs e)      

       {          

       if (chb_out.CheckState == CheckState.Checked)        

         {             

        if (tb_input.Text == "")     

                {                  

       MessageBox.Show("没有可要删除的进程");       

                  chb_out.CheckState = CheckState.Unchecked;       

              }                

    else   

      {                

         chb_input.CheckState = CheckState.Unchecked;      

                   rt_box.Clear();          

           }       

          }

                //if (tb_input.Text == "")             //{             //    MessageBox.Show("没有可要删除的进程");             //    chb_out.CheckState = CheckState.Checked;             //}             //else if (chb_out.Checked)             //{             //    chb_input.CheckState = CheckState.Unchecked;             //    rt_box.Clear();             //}         }

            private void button2_Click(object sender, EventArgs e)  

           {            

    if (rt_box.Text == "")     

            {              

       MessageBox.Show("请将需要监视的程序加入到任务列表");   

              }         

        else         

        {           

          Thread td = new Thread(new ThreadStart(IsJinChen));    

                 td.Start();       

          }       

      }       

      private void IsJinChen()       

      {    

             while (true)  

               {             

        GC.Collect();  

                   bool mark = false;           

          foreach (Process process in System.Diagnostics.Process.GetProcesses())     

                {                  

       if (process.ProcessName == System.IO.Path.GetFileNameWithoutExtension(tb_input.Text))          

               {                        

    //说明当前系统已存在用户选择的进程,不做任何操作     

                        mark = true;               

              //break;             

            }               

      }         

            if (mark == false)       

              {                   

      JCstart();            

         }            

         else           

          {              

           Thread.Sleep(Convert.ToInt32( numUPdowm.Value)*60000);    

                     continue;            

         }             }       

      }        

    private void JCstart()     

        {            

    Process.Start(tb_input.Text);    

         }

            private void button3_Click(object sender, EventArgs e)  

           {         

        //Thread td = Thread.CurrentThread;            

    //Thread.Sleep(10000);    

         }    

    }

    }

  • 相关阅读:
    洛谷P1084 [NOIP2012提高组Day2T3]疫情控制
    洛谷P1083 [NOIP2012提高组Day2T2]借教室
    洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
    POJ1692 Crossed Matchings
    洛谷P1315 [NOIP2011提高组Day2T3] 观光公交
    阅读了几个别人写的轮播源码
    js遍历函数
    解决IE6的PNG透明
    04-树5 Root of AVL Tree
    平衡树实现
  • 原文地址:https://www.cnblogs.com/sling/p/3061656.html
Copyright © 2020-2023  润新知