Подтвердить что ты не робот

Как запустить процесс с низким приоритетом? С#

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

 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; приложение работает нормально.

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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