当表单关闭时,c#kill其他进程

时间:2014-07-30 14:21:42

标签: c# kill-process

我希望在表单关闭时杀死一些进程

private void Form1_Closed(object sender, System.EventArgs e)
        {
            Process[] processList = Process.GetProcessesByName("notepad");

            if(processList.Length > 0)
            {
                processList[0].Kill();
            }

        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            Process[] processList = Process.GetProcessesByName("notepad");

            if (processList.Length > 0)
            {
                processList[0].Kill();
            }
        }
像这样

但此来源不起作用

我想我需要制作一些后台线程

如何为支票表格关闭后台线程?

3 个答案:

答案 0 :(得分:1)

确保您的活动正确连接。 还有一些额外的输入。您正在查杀列表中找到的第一个记事本实例。

如果该实例属于另一个用户,会发生什么?

您应该检查进程的所有者,以确保它属于当前用户。

如果用户打开了多个记事本实例,会发生什么?

//get our seesion id for current user running the app
int currentUser = Process.GetCurrentProcess().SessionId;

//get a list where process equals notepad and session id is current user
List<Process> currentProcesses = Process.GetProcessesByName("notepad").Where(p => p.SessionId.Equals(currentUser)).ToList();

//used list for .ForEach less code to write
currentProcesses.ForEach(p => p.Kill());

答案 1 :(得分:0)

没有理由为您的操作创建后台线程。实际上,如果Form1是Application.Run(new Form1())调用的主要表单,那么您创建的任何后台主题将在表单关闭时终止。

在事件处理程序中放置一个断点以验证:

  1. 他们确实在执行 - 也就是说你在构造函数中有正确的事件订阅:

    Form1.Closing += new EventHandler(Form1_FormClosing); Form1.Closed += new EventHandler(Form1_FormClosed);

  2. 此过程由Process.GetProcessesByName("notepad")

  3. 返回

    如果您在尝试上述操作后仍然遇到问题,请更新您的帖子。

答案 2 :(得分:0)

我解决了这个问题

问题在于杀死进展

Process[] localByName = Process.GetProcessesByName("notepad");
                foreach (Process p in localByName)
                {
                    p.Kill();
                }