【问题标题】:c# kill other process when form closedc#窗体关闭时杀死其他进程
【发布时间】:2014-07-30 14:21:42
【问题描述】:

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

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();
            }
        }

喜欢这个

但是这个来源不起作用

我想我需要做一些后台线程

如何关闭检查表单的后台线程?

【问题讨论】:

  • 怎么不行?您的代码是否被执行并且没有找到任何东西?可能是您需要寻找notepad.exe
  • 你需要一个后台线程做什么? 不起作用是什么意思?
  • 事件中的代码将起作用。我测试了它。我猜你的事件没有触发。
  • 我对 c# 知之甚少,我想在我的表单关闭时杀死 notepad.exe,所以我添加了以上两个函数,但它不起作用
  • @AndrewArnold 它应该没有扩展,他所做的应该按原样工作。

标签: c# kill-process


【解决方案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());

【讨论】:

    【解决方案2】:

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

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

    1. 它们确实在执行——也就是说,您的构造函数中有正确的事件订阅:

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

    2. Process.GetProcessesByName("notepad")正在返回进程

    如果您在尝试上述方法后仍有问题,请更新您的帖子。

    【讨论】:

      【解决方案3】:

      我解决了这个问题

      问题在于杀死进度

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-09
        • 2021-07-24
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        相关资源
        最近更新 更多