40

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

 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;,应用程序运行良好。

4

3 回答 3

52

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

于 2009-06-18T01:37:37.737 回答
15

您可以通过做一些小技巧来创建优先级较低的进程。您降低父进程优先级,创建新进程,然后恢复到原始进程优先级:

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

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

childIdle在开始时拥有进程优先级。

于 2015-10-15T21:06:59.910 回答
6

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

于 2011-09-29T15:46:37.673 回答