2013-02-20 32 views
5

Trong .NET Process.GetProcessById ném ngoại lệ nếu quá trình với ID này không chạy. Làm thế nào để gọi phương thức này một cách an toàn để nó không ném một ngoại lệ? Tôi đang nghĩ đến một cái gì đó giống nhưLàm thế nào để kiểm tra xem quá trình vẫn chạy trước khi gọi Process.GetProcessById?

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

Nhưng không thể tìm thấy bất kỳ phương pháp để kiểm tra ID, trừ có lẽ nhận được tất cả các tiến trình đang chạy và kiểm tra xem id tồn tại trong danh sách.

+0

Có tệ không nếu bạn gặp ngoại lệ? –

+2

Trong kinh nghiệm và thử nghiệm của tôi, hiệu suất của mã hóa bởi ngoại lệ như vậy là rất xấu –

+0

Vì vậy, nó là về hiệu suất ?? Vâng, nếu bạn chỉ bao quanh hai dòng với try-catch nó sẽ không làm tổn thương, tôi tin rằng ... –

Trả lời

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

Tôi nhìn vào phương pháp Process.GetProcessById.

Nó sử dụng lớp tĩnh bên trong ProcessManager để đảm bảo, quá trình đó chạy. ProcessManager nhận tất cả các quá trình hiện đang chạy trong hệ thống và kiểm tra có id, vì vậy tôi nghĩ rằng đó là cách tốt nhất để làm điều đó.

Vì vậy, bạn nên xem xét chi phí của ngoại lệ hoặc chi phí của mảng Process.

1

Chỉ cần sử dụng try-catch block

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

} 
return p; 
0

Yeah, sử dụng thử + bắt có lẽ sẽ làm các trick. Nếu quá trình này không chạy, sẽ không có gì xảy ra thay vì ném một ngoại lệ.

Các vấn đề liên quan