عملية ويتفوريكسيت c # ستارتينفو
لدي التعليمات البرمجية التالية: وأنا أعلم أن الإخراج من عملية أنا بدأت حوالي 7MB طويلة. تشغيله في وحدة تحكم ويندوز يعمل بشكل جيد. لسوء الحظ برمجيا هذا يتوقف إلى أجل غير مسمى في ويتفوريكسيت. لاحظ أيضا هذا لا التعليمات البرمجية لا شنق لمخرجات أصغر (مثل 3KB). هل من الممكن أن ستانداردوتبوت الداخلي في بروسيسستارتينفو المخزن المؤقت غير قادر على 7MB إذا كان الأمر كذلك، ماذا أفعل بدلا من ذلك إن لم يكن، ماذا أفعل الخطأ المشكلة هي أنه إذا قمت بإعادة توجيه ستانداردوتبوت أندور ستاندارديرور المخزن المؤقت الداخلي يمكن أن تصبح كاملة. مهما كان الأمر الذي تستخدمه، يمكن أن يكون هناك مشكلة: إذا كنت تنتظر العملية للخروج قبل قراءة ستانداردوتبوت عملية يمكن منع محاولة الكتابة إليها، وبالتالي فإن العملية لا تنتهي أبدا. إذا قرأت من ستانداردوتبوت باستخدام ريادتويند ثم العملية الخاصة بك يمكن منع إذا لم تغلق العملية ستانداردوتبوت (على سبيل المثال إذا لم ينتهي أبدا، أو إذا تم حظره الكتابة إلى ستانداردرور). الحل هو استخدام غير متزامن يقرأ للتأكد من أن المخزن المؤقت لا تحصل على كامل. لتجنب أي ديادلوكس وجمع كل الإخراج من كل من ستانداردوتبوت و ستانداردرور يمكنك القيام بذلك: تحرير: انظر الإجابات أدناه للتعامل مع المهلة وتجنب استثناءات أوبجكتديسبوسيبسيبسيون. وثائق ل process. StandardOutput يقول لقراءة قبل الانتظار خلاف ذلك يمكنك الجمود، مقتطف نسخها أدناه: علامة بييرز الجواب ممتاز، ولكن أود فقط إضافة ما يلي: المندوبين أوتبوتداتاريسيفد و إرورداتاريفسد تحتاج إلى إزالتها قبل أوتبوتايثاندل و إرورويتاندل الحصول على استبعاده. إذا استمرت العملية في إخراج البيانات بعد تجاوز المهلة ثم ينتهي، سيتم الوصول إلى المتغيرات أوتبوتايثاندل و إرورويتاندل بعد التخلص منها. (في كان لي لإضافة هذا التحذير كجواب كما لم أستطع التعليق على منصبه.) لدينا هذه المسألة أيضا (أو البديل). جرب ما يلي: 1) إضافة مهلة إلى p. WaitForExit (نن) حيث نن في مليثانية. 2) وضع استدعاء ريادتويند قبل استدعاء ويتفوريكسيت. هذا هو ما رأينا مس توصي. أنا لديك حالة حيث أريد تنفيذ ملف ثم قم بحذف الملف القابل للتنفيذ عند تنفيذ التنفيذ. يمكنني استخدام System. Diagnostics. Process. Start () لتنفيذ الملف، واستخدام. WaitForExit () الانتظار لإكمال العملية. ثم استخدم File. Delete (اسم الملف) لحذف الملف القابل للتنفيذ. المشكلة هي أنه في بعض الأحيان سوف تفشل File. Delete مع الخطأ التالي: هذا يقودني إلى الاعتقاد بأن بطريقة ما، لا تزال العملية على قيد الحياة وقفل الملف القابل للتنفيذ حتى بعد إرجاع استدعاء. WaitForExit (). لقد وجدت مواضيع أخرى على الشبكة التي تصف نفس السلوك، ولكن لم أجد أي أن تختتم مع تفسير معقول أو حل لهذه المشكلة، بخلاف اقتراحات وضع النوم (ن) بعد ويتفوريكسيت (). أمثلة: هنا هو برنامج عينة أن يعيد المشكلة بالنسبة لي. لقد اختبرت على كل من ويندوز زب و ويندوز 7، وكلاهما تفشل في نهاية المطاف في مرحلة ما مع نفس الخطأ. لاحظ أيضا أن ss. exe قابل للتنفيذ هو بسيط بسيط كوهيلو ورلدكوت تطبيق وحدة التحكم. والانتاج عادة ما يبدو شيئا مثل (مع كمية مختلفة من التكرارات قبل وقوع الحادث): أي أفكار حول لماذا يحدث هذا، وإذا كان هناك بعض الإصلاح لهذا (بخلاف وضع ينام في التعليمات البرمجية) الجمعة 08 يناير 2010 3 : 40 بيإم السبب هو أنه على الرغم من اكتمال العملية، قد يستغرق بضعة ميلي ثانية واحدة لنظام التشغيل لإنهاء تدميره. في نظام التشغيل متعددة المهام بعد كل شيء، في محاولة لخدمة الجميع في نفس الوقت. للأسف، لا توجد طريقة لمعرفة متى لم يتم تأمين الملف (بريسيسلي). عندما أنت ويتفوريكسيت، تقوم بإنشاء كائن تأمين على كائن العملية. لا يمكن تدمير كائن العملية حتى يتم تحرير القفل ولا يمكنك الانتظار على شيء لا توجد (الدجاج والبيض نوع القضية). حتى الشيء الوحيد المعقول الذي يمكنك القيام به هو الحفاظ على المحاولة، شيء من هذا القبيل: علامة كما جواب صموئيل ستانوجيفيك الجمعة، 08 يناير 2010 4:20 م تحريره من قبل تيرجيفر الجمعة، يناير 08، 2010 4:20 بيإم تغيير إلى بول، حلقة لانهائية إصلاح الجمعة، يناير 08، 2010 4:15 بيإم تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب. هل ترغب في المشاركة
Comments
Post a Comment