如何启动优先级较低的流程? C#

时间:2009-06-18 01:34:38

标签: c# process shellexecute

我想执行命令行工具来处理数据。它不需要阻止。 我希望它是低优先级。所以我写了下面的

 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 个答案:

答案 0 :(得分:44)

尝试在启动流程后设置PriorityClass。任务管理器以这种方式工作,允许您为已经运行的进程设置优先级。

答案 1 :(得分:6)

您可以通过稍微破解来创建优先级较低的进程。您降低父进程优先级,创建新进程,然后恢复为原始进程优先级:

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

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

child将在开始时具有Idle进程优先级。

答案 2 :(得分:4)

如果你准备P / Invoke到CreateProcess,你可以在标志中传递CREATE_SUSPENDED。然后,您可以在恢复流程之前调整流程优先级。