Как запустить процесс с низким приоритетом? С#
Я хочу выполнить инструмент командной строки для обработки данных. Это не должно быть блокировкой. Я хочу, чтобы это было не в приоритете. Поэтому я написал ниже
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
в флаги. Затем вы можете настроить приоритет процесса перед возобновлением процесса.