2013-02-20 256 views
5

在.NET中Process.GetProcessById如果此ID的进程没有运行,则会引发异常。如何安全地调用这个方法,使其不会抛出异常?我想这样如何在调用Process.GetProcessById之前检查进程是否仍在运行?

if(Process.IsRunning(id)) return Process.GetProcessById(id); 
else return null; //or do something else 

但找不到任何方法来检查ID,可能比让所有正在运行的进程,并检查ID是否在列表中存在其他。

+0

如果您发现异常,这不好吗? – 2013-02-20 08:59:39

+2

在我的经验和测试中,这样的例外编码的性能非常差 – 2013-02-20 09:02:10

+0

所以它是关于性能?那么,如果你只是围绕这两条线尝试赶上它不会受到伤害,我相信... – 2013-02-20 09:03:17

回答

9
public Process GetProcByID(int id) 
{ 
    Process[] processlist = Process.GetProcesses(); 
    return processlist.FirstOrDefault(pr => pr.Id == id); 
} 

我看里面Process.GetProcessById方法。

它使用内部静态类ProcessManager来确保该进程在运行。 ProcessManager获取系统中当前运行的所有进程并检查其中的id,因此我认为这是执行此操作的最佳方法。

所以你应该考虑异常开销或Process数组的开销。

1

只需使用try-catch块

Process p = null; 
try{ 
    p = Process.GetProcessById(id); 
} 
catch(Exception){ 

} 
return p; 
0

呀,使用try +捕捉可能会做的伎俩。如果进程没有运行,则不会发生抛出异常的情况。

相关问题