我可以说两个进程:记事本和taskmgr打开。我想杀死那两个或更多的进程,我该怎么做? 到目前为止,我想出了这个由谷歌搜索周围:如何使用linq轻松删除多个进程
Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());
不知道如何上述两个过程之间区别?
我可以说两个进程:记事本和taskmgr打开。我想杀死那两个或更多的进程,我该怎么做? 到目前为止,我想出了这个由谷歌搜索周围:如何使用linq轻松删除多个进程
Process.GetProcesses().Where(p => p.ProcessName == "notepad,taskmgr").ToList().ForEach(y => y.Kill());
不知道如何上述两个过程之间区别?
linq查询看起来只是在名称为“notepad,taskmgr”时才找到进程。两者都要,使用这样的查询:
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr").ToList().ForEach(y => y.Kill());
如果你要增加更多的流程,你可能想要做这样的事情:
var processNamesToKill = new List<string> { "notepad", "taskmgr", "someotherprocess" };
Process.GetProcesses().Where(p => processNamesToKill.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
您可以再添加其他进程到那个清单。至于搞清楚你发现了哪些东西,在你的ForEach中,你可以通过y.ProcessName
访问名字,并在需要的地方使用它。
编辑:将.exe
添加到那些进程名称(如果需要的话)。
创建一个列表或数组与流程被杀害,然后检查列表中过程
List<string> killme = new List<string> { "notepad", "taskmgr" }
Process.GetProcesses().Where(p => killme.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
一个衬片的名字,这是一个答案被删除:
Process.GetProcesses().Where(p => new[] {"notepad", "taskmgr"}.Contains(p.ProcessName)).ToList().ForEach(y => y.Kill());
你想要做到这一点吗?
Process.GetProcesses().Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr")
.ToList().ForEach(y => y.Kill());
我会做什么,如果我是你,将一次只做1个名字。任何阅读代码的人都会更容易理解。
class Program
{
static void Main(string[] args)
{
killProcess("notepad.exe");
killProcess("taskmgr");
}
public static void killProcess(string name)
{
foreach (Process process in Process.GetProcessesByName(name))
{
process.Kill();
}
}
}
,如果你的LINQ的其他作品,这其中应该只是像
... Where(p => p.ProcessName == "notepad" || p.ProcessName == "taskmgr") ...
否则,你可能想使一组进程名杀死的,像
var set = new HashSet<string>() { "notepad.exe", "taskmgr.txt", "someotherthing.exe" };
... linq .. Where(p=> set.Contains(p.ProcessName))...
或该集合上的其他各种联合操作。
var processesToKill = new [] {"notepad", "iexplorer"};
var processes = Process.GetProcesses().Where(p => processesToKill.Contains(p.ProcessName)).ToList();
processes.ForEach(p => p.Kill());
如果你有,你想杀死进程的列表,你可以使用Contains
,因为这样做p => p.ProcessName == "notepad,taskmgr"
将无法正常工作(没有进程将有名为“记事本,taskmgr”,添加一个逗号没有特殊意)
因此,而不是尝试像
var processesToKill = new Collection<string> { "notepad", "taskmgr" };
foreach (var process in Process.GetProcesses().Where(p => processesToKill.Contains(p)))
{
process.Kill();
}
这是做到这一点的最好方法是什么?是否有单线解决方案?我猜对不对? – NoviceMe
我会建议一个字符串集而不是'List',但这只是我 –
@NoviceMe有人发表了一个解决方案,其中一个数组是在linq语句中构建的,但我会认为这是更具可读性的 – msmucker0527