17

私はC#.NET2.0を使用しています。PIDが存在するかどうかを判断する必要があります。私は次のコードを思いついた:

private bool ProcessExists(int iProcessID)
{
    foreach (Process p in Process.GetProcesses())
    {
        if (p.Id == iProcessID)
        {
            return true;
        }
    }
    return false;
}

すべてのプロセスを繰り返す以外に、これを行うためのより良い方法はありますか?

4

3 に答える 3

25

クイックノート:自分以外のプロセスが実行されているかどうかを判断することはできません。最近のある時点で実行されていたことがわかります。プロセスは、IDが一致するかどうかを確認する正確な瞬間を含め、任意の時点で存在しなくなる可能性があります。

そうは言っても、このタイプの決定はあなたのプログラムにとって十分であるかもしれないし、そうでないかもしれません。それは本当にあなたがやろうとしていることに依存します。

これがあなたが書いたコードの短縮版です。

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}
于 2009-10-09T18:09:06.670 に答える
10

ここで危険なのは、そのプロセスIDをどこから取得したのかということです。以前に保存した番号だけの場合は、元のプロセスが停止し、同じIDで新しいプロセスが実行されている可能性があります。

何を達成しようとしていますか?あなたの実際の目標を達成するためのより良い方法があるかもしれません。

于 2009-10-09T18:11:03.893 に答える
5

System.Diagnostics.Process.GetProcessById(iProcessID)プロセスが存在しない場合、ArgumentExceptionをスローします。それはプロセスが存在するかどうかを確認するための最良の方法ではありませんが、うまくいけば、これがあなたが探しているものです。

于 2009-10-09T18:10:31.330 に答える