2009-09-03 43 views
4

我使用System.Diagnostics.ProcessStartInfo來設置從.NET程序啓動進程的參數。一旦開始處理時,我可以使用如何以空閒優先級啓動.NET進程?

myProcess.PriorityClass = ProcessPriorityClass.Idle 

要更改優先級的進程閒置,使其只在後臺運行,並且不纏着我的CPU供電。有什麼方法可以使用ProcessStartInfo對象來指定進程應該以「空閒」優先級開始,以便在執行期間的任何時候進程都以高於空閒的速度運行?

+1

爲什麼無法啓動並立即將其設置爲空閒? – 2009-09-03 17:32:14

回答

5

啓動暫停的進程,然後更改優先級,然後恢復進程。您可以使用CreateProcess Win32函數使用CREATE_SUSPENDED標誌執行此操作,但不幸的是,我不確定.NET中是否支持此操作,因此您可能需要使用P/Invoke

6

在Process類中沒有提供的API來啓動具有不同優先級的進程。最好的選擇是在開始處理後立即設置它。一旦你開始這個過程中,你可以設置Process.PriorityClass

var myProcess = Process.Start(...); 
myProcess.PriorityClass = ProcessPriorityClass.Idle; 

如果你想防止進程具有較高的優先級運行,darin's answer提供使用P/Invoke和Windows API一種解決方法。即使這會以正常的優先級啓動進程,但是如果它以暫停狀態啓動,它將不會運行,所以優先級將不起作用。

+0

我已經在問題中說過我正在這樣做。但是,我想在流程開始運行之前設置優先級。請閱讀這個問題。 – Kibbee 2009-09-03 17:28:19

+0

爲什麼downvote?您不能在ProcessStartInfo中設置優先級,但您可以在您創建的進程上設置它,這正是我所顯示的內容。 – 2009-09-03 17:28:34

+0

您可以在創建進程後立即執行此操作,但不能在此之前執行此操作。我很抱歉,但這是答案 - 沒有其他選擇。 – 2009-09-03 17:29:22