0

少し前に、 app.PriorityClass = ? のときに発生するエラー メッセージについて質問しました。app.start の前でした。どうやら私が気に入らなかった解決策は、開始後にそれを書くことでした。

今日まで問題なく動作していました。「プロセスが終了したため、リクエストを処理できません」というメッセージが表示されます。例外が発生するのは、プロセスがすぐに完了して優先度が変更されないためです (場合によっては)。これを試してみるのは気分が悪いです。本当の解決策は何ですか?優先度の低いプロセスを起動するにはどうすればよいですか?

            Process app = new Process();
            app.StartInfo.FileName = @"bin\convert.exe";
            app.StartInfo.Arguments = string.Format("{0} -resize 150x150 {1}", filename, thumbName);
            //app.PriorityClass = ProcessPriorityClass.BelowNormal; //No process is associated with this object.
            app.Start();
            //app.PriorityClass = ProcessPriorityClass.BelowNormal; //"Cannot process request because the process has exited."
4

5 に答える 5

2

選択肢は次のとおりです。

  1. 既に終了している場合は、設定して例外をキャッチしてみてください。
  2. プロセスが最初に終了したかどうかを確認してから、それを設定しようとします...そして、すでに終了している場合でも例外をキャッチします。

チェックしても、チェックしてから設定しようとするまでの間にプロセスが終了する可能性があるためです。したがって、実際には、コードが少ないため、オプション #1 を使用してください。

于 2009-06-22T19:42:52.873 に答える
2

解決策: 中断されたプロセスを開始し、優先度変更してからプロセスを再開します。

これは、CreateProcess の呼び出しで CREATE_SUSPENDED を使用して Win32 で行われますが、残念ながら私は .NET の方法を直接知りません。

于 2009-06-22T20:12:34.310 に答える
1

可能な限り低いレベルで対処する方法を知っているにもかかわらず、キャッチや例外条件を回避したいのはなぜですか? 優先度を設定できれば、素晴らしいです。そうでない場合、プロセスは終了し、作業は完了です。エラーを適切に処理しないようにする理由はないと思います。

于 2009-06-22T19:47:54.843 に答える
0

実行できるテストはすべて、すぐに競合状態になります。アプリがすぐに終了する場合、私が考えることができる唯一の安全なことはtry/を使用することcatchです。

stdioから読み取らない限り?その場合、優先度を変更するまで、それをリダイレクトして、故意に入力ストリームを閉じないようにすることができます。

于 2009-06-22T19:42:49.113 に答える
-2

if ステートメントはいつでも使用できます。

if (!app.HasExited)
{
   app.PriorityClass = ProcessPriorityClass.BelowNormal;
}

他の回答にも同意しますが、例外をキャッチして適切に処理する必要があります。

于 2009-06-22T19:57:12.250 に答える