c#进程、定时器初步学习

首先是什么原因让我做这个小项目的呢,是因为在知乎里看到的游侠的文章才尝试着自己做的,文章地址是:https://www.zhihu.com/question/48811975

开始做的时候我是照着文章的界面去设计的,界面差不多是这样子:

然后具体说一说我遇到的问题吧,

首先是进程的问题:做这个小工具主要是为了关闭英雄联盟客户端,所以首先是怎么获取本机正在运行的进程,废话不多说,直接贴代码:

public void Process1(object sender, EventArgs e)
        {
            string name = "LeagueClient";
            Process[] process = Process.GetProcesses();
            for (int i = 0; i < process.Length; i++)
            {
                if (process[i].ProcessName == name)
                {
                    process[i].Kill();
                    MessageBox.Show("已经关闭英雄联盟,请在规定时间内不要打开");
                }
            }
            if (t.AutoReset == false)
            {
                MessageBox.Show("时间到,现在可以打开英雄联盟了,但是要适度玩游戏哦!");
            }
        }

  

其实网上的例子大把,只需要搜索process 获取进程关键字就ok,这里我用的是局部变量传进程的名称

然后是我们要在一段时间内让进程不断的被杀,当我们点击button后,在一段时间内,英雄联盟不能启动,所以这里就要用到timer这个控件了

在button按钮里的代码如下:

 public void button1_Click(object sender, EventArgs e)
        {
            
            tt.Start();
            if (textBox1.Text == "")
            {
                MessageBox.Show("请输入要屏蔽的时间");
            }
            else if (int.Parse(textBox1.Text) < 60)
            {
                MessageBox.Show("时间必须大于60");
            }
            else
            {
                label1.Text = "00";
            label7.Text = "00:00";


            t.Elapsed += new System.Timers.ElapsedEventHandler(Process1);//到达时间自动执行Process1方法
            t.AutoReset = true;//设置执行t.Elapsed += new System.Timers.ElapsedEventHandler(Process1);这个是执行一次(false)还是一直执行(true)
            t.Enabled = true;//启用elapsed事件(true),关闭elapsed事件(false)


            }


        }

 

  

再然后就是timer1_Tick事件了,在这个方法里,我开始是栽了很多的跟头的,首先遇到的问题是给label赋值问题,会报一个进程错误,然后这个错误有两种解决方法:

第一种是在这里加上CheckForIllegalCrossThreadCalls = false;这么一句,就不会出现上面的问题了,在有一种是比较高深的,我也只是明白了一点点:声明一个委托,然后invoke:

这个的意思就是异步调用,使用委托去执行你需要执行的方法,就是把方法当作一个参数传递,其他不多说了,自行百度

这里我要提醒我自己一下:论全局声明和局部声明的重要性。要知道这个问题可是耗费了我一个上午的时间。

这里再说下我们想要做到计时效果的话,就是实时显示时间,首先是需要设置一下timer的Interval的属性,单位是毫秒,不管是在代码中设置还是在属性里设置,这一步是实时显示时间的关键,个人建议设置为1秒刷新,到了这一步,基本的功能都完善了,再想想好像也没有了任何遇到的问题。

如果有想自己动手做碰到难题的朋友,欢迎随时交流切磋。

QQ:511582456  请说明是什么原因。

感悟:任何简单的事情看似简单,实则对你来说是很难的,如果你不去尝试动手,也许你永远也不会做。反之,任何难的事情都是由简单的事情积累而成的,所以不积跬步无以至千里。

原文地址:https://www.cnblogs.com/liuhuimh/p/7054525.html