سؤال

وأنا باستخدام C # .NET 2.0. ولست بحاجة لتحديد ما إذا كان يوجد PID. خطرت لي التعليمة البرمجية التالية:

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

هل هناك طريقة أفضل للقيام بذلك غير بالتكرار جميع العمليات؟

هل كانت مفيدة؟

المحلول

وسريعة ملاحظة: لا يمكن تحديد أي وقت مضى إذا عملية، بخلاف بنفسك، قيد التشغيل. يمكن أن أقول لكم إلا أنه كان يعمل في وقت ما في الماضي القريب. عملية يمكن ببساطة تزول من الوجود في أي لحظة بما في ذلك لحظة بالضبط ما تحقق لمعرفة ما إذا كان لديه ID مطابقة.

وهذا قال الوجود، هذا النوع من تقرير قد أو قد لا تكون كافية جيدة للبرنامج. انها حقا يتوقف على ما تحاول القيام به.

وهنا هو نسخة مختصرة من الشفرة التي كتب.

private bool ProcessExists(int id) {
  return Process.GetProcesses().Any(x => x.Id == id);
}

نصائح أخرى

والشيء محفوفة بالمخاطر هنا هو: من أين لك هذا معرف العملية من؟ اذا كان مجرد رقم حفظته في وقت سابق، وعملية الأصلي قد لقوا حتفهم، ويمكن أن يكون عملية جديدة <لأ href = "http://msdn.microsoft.com/en-us/library/system.diagnostics.process.id .aspx اتصال "يختلط =" noreferrer "> تشغيل مع نفسه ID .

وماذا تحاول تحقيقه؟ قد تكون هناك وسيلة أفضل لتحقيق الهدف الفعلي.

وSystem.Diagnostics.Process.GetProcessById(iProcessID) أن رمي ArgumentException حالة عدم وجود هذه العملية. على الرغم من أن هذا ليس هو أفضل طريقة لمعرفة ما اذا كان وجود هذه العملية، ولكن نأمل أن هذا هو ما كنت أبحث عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top