Как запустить процесс с низким приоритетом? C # - PullRequest
30 голосов
/ 18 июня 2009

Я хочу запустить инструмент командной строки для обработки данных. Это не должно быть блокирование. Я хочу, чтобы это было низким приоритетом. Поэтому я написал ниже

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

Однако я получаю System.InvalidOperationException с сообщением «Никакой процесс не связан с этим объектом». Зачем? Как правильно запустить это приложение с низким приоритетом?

Без строки app.PriorityClass = ProcessPriorityClass.BelowNormal; приложение работает нормально.

Ответы [ 3 ]

45 голосов
/ 18 июня 2009

Попробуйте установить PriorityClass ПОСЛЕ запуска процесса. Диспетчер задач работает таким образом, позволяя вам установить приоритет для уже запущенного процесса.

6 голосов
/ 16 октября 2015

Вы можете создать процесс с более низким приоритетом, сделав небольшой взлом. Вы понижаете приоритет родительского процесса, создаете новый процесс и затем возвращаетесь к первоначальному приоритету процесса:

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

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

child будет иметь приоритет процесса Idle в самом начале.

4 голосов
/ 29 сентября 2011

Если вы готовы к P / Invoke к CreateProcess, вы можете передать CREATE_SUSPENDED во флаги. Затем вы можете настроить приоритет процесса перед его возобновлением.

...