2013-02-20 255 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 +捕捉可能會做的伎倆。如果進程沒有運行,則不會發生拋出異常的情況。

相關問題