zoukankan      html  css  js  c++  java
  • 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  请说明是什么原因。

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

  • 相关阅读:
    谷歌 colab调用 Kaggle 数据集
    TensorFlow/Keras binary_crossentropy损失函数
    R语言 pivot_longer 图表变换
    R语言 ggplot2 柱状图
    R语言 ggplot2 笔记
    Bash 批量删除指定后缀的文件
    MacBook 风扇控制软件 Macs Fan Control
    R语言 dplyr selec 辅助函数
    R语言一次性更新全部packages
    R语言 glue 版本冲突
  • 原文地址:https://www.cnblogs.com/liuhuimh/p/7054525.html
Copyright © 2011-2022 走看看