2009-06-18 10 views
27

コマンドラインツールを実行してデータを処理します。ブロックする必要はありません。 私は優先度を低くしたい。だから私は、しかし、私はメッセージでSystem.InvalidOperationExceptionを得る「いいえプロセスがこのオブジェクトに関連付けられていない。」優先度の低いプロセスを起動するにはどうすればよいですか? C#

Process app = new Process(); 
app.StartInfo.FileName = @"bin\convert.exe"; 
app.StartInfo.Arguments = TheArgs; 
app.PriorityClass = ProcessPriorityClass.BelowNormal; 
app.Start(); 

の下に書いていますどうして?このアプリを優先的に適切に起動するにはどうすればよいですか?

いいえ行app.PriorityClass = ProcessPriorityClass.BelowNormal;がなくてもアプリは正常に動作します。

答えて

38

プロセスを開始した後でPriorityClassを設定してみてください。タスクマネージャはこのように動作し、すでに実行中のプロセスに優先度を設定することができます。

+1

これが唯一の方法です。 –

3

CreateProcessにP/Invokeする準備ができている場合は、CREATE_SUSPENDEDをフラグに渡すことができます。その後、プロセスを再開する前にプロセスの優先順位を微調整することができます。

4

少しハックすることで優先度の低いプロセスを作成できます。あなたは、親プロセスの優先度を下げ、新しいプロセスを作成し、元のプロセスの優先度に戻す:

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

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

child開始時にIdleプロセスの優先権を持つことになります。

関連する問題