2009-06-18 36 views
27

Tôi muốn thực thi một công cụ dòng lệnh để xử lý dữ liệu. Nó không cần phải chặn. Tôi muốn mức độ ưu tiên thấp. Vì vậy, tôi đã viết bên dướiLàm cách nào để khởi chạy quy trình có mức độ ưu tiên thấp? C#

Process app = new Process(); 
app.StartInfo.FileName = @"bin\convert.exe"; 
app.StartInfo.Arguments = TheArgs; 
app.PriorityClass = ProcessPriorityClass.BelowNormal; 
app.Start(); 

Tuy nhiên, tôi nhận được System.InvalidOperationException với thông báo "Không có quá trình nào được liên kết với đối tượng này". Tại sao? Làm cách nào để khởi chạy ứng dụng này một cách chính xác với mức độ ưu tiên thấp?

Không có dòng app.PriorityClass = ProcessPriorityClass.BelowNormal; ứng dụng chạy tốt.

Trả lời

38

Thử đặt PriorityClass SAU KHI bạn bắt đầu quá trình. Trình quản lý tác vụ hoạt động theo cách này, cho phép bạn đặt ưu tiên cho một quy trình đang chạy.

+1

Hóa ra đây là cách duy nhất. –

3

Nếu bạn chuẩn bị P/Gọi tới CreateProcess, bạn có thể vượt qua CREATE_SUSPENDED trong cờ. Sau đó, bạn có thể tinh chỉnh quy trình ưu tiên trước khi tiếp tục quy trình.

4

Bạn có thể tạo quy trình có mức độ ưu tiên thấp hơn bằng cách thực hiện một chút hack. Bạn làm giảm quá trình ưu tiên phụ huynh, tạo ra các quy trình mới và sau đó quay trở lại quá trình ưu tiên ban đầu:

var parent = Process.GetCurrentProcess(); 
var original = parent.PriorityClass; 

parent.PriorityClass = ProcessPriorityClass.Idle; 
var child   = Process.Start("cmd.exe"); 
parent.PriorityClass = original; 

child sẽ có Idle quá trình hưởng quyền ưu tiên khi bắt đầu.

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