如何启动优先级较低的流程? C#
我想执行命令行工具来处理数据。 它不需要阻止。 我希望它是低优先级。 所以我写了下面的内容
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;
该应用运行正常。
尝试在启动该过程后设置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到CreateProcess
,您可以在标志中传递CREATE_SUSPENDED
。 然后,您可以在恢复进程之前调整进程优先级。