如何在调用Process.GetProcessById之前检查进程是否仍在运行?
问题描述:
在.NET中Process.GetProcessById
如果此ID的进程没有运行,则会引发异常。如何安全地调用这个方法,使其不会抛出异常?我想这样如何在调用Process.GetProcessById之前检查进程是否仍在运行?
if(Process.IsRunning(id)) return Process.GetProcessById(id);
else return null; //or do something else
但找不到任何方法来检查ID,可能比让所有正在运行的进程,并检查ID是否在列表中存在其他。
答
public Process GetProcByID(int id)
{
Process[] processlist = Process.GetProcesses();
return processlist.FirstOrDefault(pr => pr.Id == id);
}
我看里面Process.GetProcessById
方法。
它使用内部静态类ProcessManager来确保该进程在运行。 ProcessManager获取系统中当前运行的所有进程并检查其中的id,因此我认为这是执行此操作的最佳方法。
所以你应该考虑异常开销或Process
数组的开销。
答
只需使用try-catch块
Process p = null;
try{
p = Process.GetProcessById(id);
}
catch(Exception){
}
return p;
答
呀,使用try +捕捉可能会做的伎俩。如果进程没有运行,则不会发生抛出异常的情况。
如果您发现异常,这不好吗? – 2013-02-20 08:59:39
在我的经验和测试中,这样的例外编码的性能非常差 – 2013-02-20 09:02:10
所以它是关于性能?那么,如果你只是围绕这两条线尝试赶上它不会受到伤害,我相信... – 2013-02-20 09:03:17