إجبار العملية الخارجية على القتل بعد فترة زمنية

StackOverflow https://stackoverflow.com/questions/1434505

  •  07-07-2019
  •  | 
  •  

سؤال

لدي سطر أوامر قابل للتنفيذ يتم تشغيله من مكتبة فئة C#. في بعض المواقف النادرة جدًا ، سيتم تعليق التنفيذ بسبب بيانات سطر الأوامر التي تم تمريرها إليها. لسوء الحظ ، يؤدي هذا إلى تعليق التطبيق الذي يدعو C# dll مع تعليقه بينما ينتظر إلى غير مسمى للخروج من العملية.

إذا لم ينهي سطر الأوامر EXE التنفيذ في غضون ثانية واحدة ، فلن يخرج أبدًا. ما أود القيام به هو تولد مؤقتًا بعد بدء العملية وفرض إغلاق العملية إذا لم تخرج في غضون بضع ثوان.

ما هو أفضل نهج هنا؟ يجب أن يكون للحل الحد الأدنى من التأثير على الأداء لأن عملية سطر الأوامر هذه هي عنق الزجاجة في مهمة متكررة للغاية.

تحرير: أي سبب لاستخدام System.timer بدلاً من threading.timer أو العكس؟

            ProcessStartInfo startInfo = new ProcessStartInfo();
            startInfo.CreateNoWindow = false;
            startInfo.UseShellExecute = true;
            startInfo.WorkingDirectory = workingDirectory;
            startInfo.FileName = commandLineExe;
            startInfo.WindowStyle = ProcessWindowStyle.Hidden;
            startInfo.Arguments = strArguments;



            // Call WaitForExit and then the using statement will close.
            using (Process exeProcess = Process.Start(startInfo))
            {

                exeProcess.WaitForExit();
            }

يرجى الامتناع عن الاقتراحات التي يجب أن أحاول معرفة سبب معلق تطبيق سطر الأوامر ، أو يجب أن أقوم بتشكيل وظيفة سطر الأوامر في الكود المصدري. نحن نعمل بنشاط على هذه المشكلة ولكن ثبات التطبيق يجب أن يأتي أولاً.

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

المحلول

فقط اضف:

// Call WaitForExit and then the using statement will close.
using (Process exeProcess = Process.Start(startInfo)) {
    if(!exeProcess.WaitForExit(1000))
          exeProcess.Kill();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top