我希望在表单关闭时杀死一些进程
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();
}
}
像这样
但此来源不起作用
我想我需要制作一些后台线程
如何为支票表格关闭后台线程?
答案 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())
调用的主要表单,那么您创建的任何后台主题将在表单关闭时终止。
在事件处理程序中放置一个断点以验证:
他们确实在执行 - 也就是说你在构造函数中有正确的事件订阅:
Form1.Closing += new EventHandler(Form1_FormClosing);
Form1.Closed += new EventHandler(Form1_FormClosed);
此过程由Process.GetProcessesByName("notepad")
如果您在尝试上述操作后仍然遇到问题,请更新您的帖子。
答案 2 :(得分:0)
我解决了这个问题
问题在于杀死进展
Process[] localByName = Process.GetProcessesByName("notepad");
foreach (Process p in localByName)
{
p.Kill();
}