2013-02-20 10 views
5

In .NET Process.GetProcessById löst eine Ausnahme aus, wenn der Prozess mit dieser ID nicht ausgeführt wird. Wie kann diese Methode sicher aufgerufen werden, damit keine Ausnahme ausgelöst wird? Ich denke so etwas wieWie überprüft man, ob der Prozess noch läuft, bevor Process.GetProcessById aufgerufen wird?

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

aber keine Methode finden die ID zu überprüfen, andere als wahrscheinlich alle laufenden Prozesse immer und prüfen, ob die ID in der Liste vorhanden sind.

+0

Ist es schlimm, wenn Sie die Ausnahme gefangen haben? –

+2

Nach meiner Erfahrung und Tests ist die Leistung der Codierung von Ausnahme so sehr schlecht –

+0

So geht es um Leistung? Nun, wenn Sie diese beiden Linien nur mit Try-Catch umgeben, würde es nicht schaden, glaube ich ... –

Antwort

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

Ich schaute in Process.GetProcessById Methode.

Es verwendet interne statische Klasse ProcessManager, um sicherzustellen, dass dieser Prozess ausgeführt wird. ProcessManager ruft alle Prozesse ab, die derzeit im System ausgeführt werden, und prüft dort die IDs. Daher denke ich, dass dies der beste Weg ist.

So sollten Sie den Overhead der Ausnahme oder den Overhead von Process Array betrachten.

1

Verwenden Sie einfach try-catch-Block

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

} 
return p; 
0

Ja, mit try + fangen wahrscheinlich den Trick. Wenn der Prozess nicht ausgeführt wird, passiert nichts, anstatt eine Ausnahme auszulösen.

Verwandte Themen