利用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);    

     }    

}

}

posted @ 2013-05-05 22:09  司令-北京  阅读(353)  评论(0)    收藏  举报