Как определить, существует ли идентификатор процесса

Можно сделать это при представлении дополнительного метода для переопределения (так как Вы не можете override и new метод с тем же именем в том же типе):

abstract class BaseClass
{
    public BaseReturnType PolymorphicMethod()
    { return PolymorphicMethodCore();}

    protected abstract BaseReturnType PolymorphicMethodCore();
}

class DerivedClass : BaseClass
{
    protected override BaseReturnType PolymorphicMethodCore()
    { return PolymorphicMethod(); }

    public new DerivedReturnType PolymorphicMethod()
    { return new DerivedReturnType(); }
}

Теперь Вы имеете PolymorphicMethod метод на каждом уровне с корректным типом.

12
задан Uwe Keim 2 February 2018 в 09:43
поделиться

3 ответа

Quick Note: You can't ever determine if a process, other than your own, is running. You can only tell that it was running at some point in the recent past. A process can simply cease to exist at any given moment including the exact moment you check to see if it has a matching ID.

That being said, this type of determination may or may not be good enough for your program. It really depends on what you are trying to do.

Here is an abbreviated version of the code you wrote.

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}
20
ответ дан 2 December 2019 в 05:15
поделиться

Здесь возникает риск: откуда вы взяли этот идентификатор процесса? Если это просто число, которое вы сохранили ранее, исходный процесс мог умереть и новый процесс мог работать с тем же идентификатором .

Чего вы пытаетесь достичь? Возможно, есть более эффективный способ достижения вашей цели.

7
ответ дан 2 December 2019 в 05:15
поделиться

System.Diagnostics.Process.GetProcessById(iProcessID) would throw ArgumentException if the process doesn't exist. Although that is not the best way to check if the process exists, but hopefully this is what you're looking for.

2
ответ дан 2 December 2019 в 05:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: