2009-06-18 14 views
27

Desidero eseguire uno strumento da riga di comando per elaborare i dati. Non ha bisogno di essere bloccato. Voglio che abbia bassa priorità. Così ho scritto il seguitoCome si avvia un processo con bassa priorità? C#

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

Tuttavia, ho un System.InvalidOperationException con il messaggio "Nessun processo è associato a questo oggetto". Perché? Come faccio a lanciare correttamente questa app in bassa priorità?

Senza la riga app.PriorityClass = ProcessPriorityClass.BelowNormal; l'app funziona correttamente.

risposta

38

Provare a impostare PriorityClass DOPO aver avviato il processo. Task Manager funziona in questo modo, consentendo di impostare la priorità su un processo già in esecuzione.

+1

Risulta che questo è l'unico modo. –

3

Se si è pronti a P/Invoke per CreateProcess, è possibile passare CREATE_SUSPENDED nelle bandiere. Quindi puoi modificare la priorità del processo prima di riprendere il processo.

4

È possibile creare un processo con priorità inferiore eseguendo un piccolo trucco. È abbassare la priorità del processo genitore, creare il nuovo processo e poi ripristinare la priorità del processo originale:

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

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

child avranno il diritto di priorità Idle processo alla partenza.

Problemi correlati