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

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

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

тем не менее, я получаю System.InvalidOperationException с сообщением " ни один процесс не связан с этим объектом.- Почему? Как правильно запустить это приложение с низким приоритетом?

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

3 ответов


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


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

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

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

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


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