2009-09-03 44 views
4

我使用System.Diagnostics.ProcessStartInfo来设置从.NET程序启动进程的参数。一旦开始处理时,我可以使用如何以空闲优先级启动.NET进程?

myProcess.PriorityClass = ProcessPriorityClass.Idle 

要更改优先级的进程闲置,使其只在后台运行,并且不缠着我的CPU供电。有什么方法可以使用ProcessStartInfo对象来指定进程应该以“空闲”优先级开始,以便在执行期间的任何时候进程都以高于空闲的速度运行?

+1

为什么无法启动并立即将其设置为空闲? – 2009-09-03 17:32:14

回答

5

启动暂停的进程,然后更改优先级,然后恢复进程。您可以使用CreateProcess Win32函数使用CREATE_SUSPENDED标志执行此操作,但不幸的是,我不确定.NET中是否支持此操作,因此您可能需要使用P/Invoke

6

在Process类中没有提供的API来启动具有不同优先级的进程。最好的选择是在开始处理后立即设置它。一旦你开始这个过程中,你可以设置Process.PriorityClass

var myProcess = Process.Start(...); 
myProcess.PriorityClass = ProcessPriorityClass.Idle; 

如果你想防止进程具有较高的优先级运行,darin's answer提供使用P/Invoke和Windows API一种解决方法。即使这会以正常的优先级启动进程,但是如果它以暂停状态启动,它将不会运行,所以优先级将不起作用。

+0

我已经在问题中说过我正在这样做。但是,我想在流程开始运行之前设置优先级。请阅读这个问题。 – Kibbee 2009-09-03 17:28:19

+0

为什么downvote?您不能在ProcessStartInfo中设置优先级,但您可以在您创建的进程上设置它,这正是我所显示的内容。 – 2009-09-03 17:28:34

+0

您可以在创建进程后立即执行此操作,但不能在此之前执行此操作。我很抱歉,但这是答案 - 没有其他选择。 – 2009-09-03 17:29:22