عملية ويتفوريكسيت لا تنتظر
نيت System. Diagnostics. Process فئة 8211 الجزء 1 process. WaitForExit و. حدث حدث aren8217t العمل اعتقدت أنني قد وجدت هذا هو الحال ولكن كان خطأي، وربما نفس الشيء بالنسبة لك أيضا. سوف أذهب إلى ما وجدت أثناء استكشاف وحل هذه المسألة. الجواب القصير: إذا كنت تقوم بإعادة توجيه ستانداردوتبوت أندور ستاندارديرور، استخدم أفضل أساليب غير المتزامنة process. BeginErrorReadLine () و. BeginOutputReadLine () قبل استدعاء. WaitForExit () والتقاط الإخراج عن طريق ربط الأحداث process. ErrorDataReceived و. OutputDataReceived. الجواب الطويل يبدأ معي باستخدام فيسوال ستوديو divfmerge. exe في المجلد Common7IDE لمقارنة الملفات النصية في وضع دفعة. أنا إدخال اختبار الانحدار في عملية دفعة بدأت دفعة. كنت بحاجة إلى أداة من شأنها أن تبصق ملف اختلاف النص عند مقارنة ملفين (وليس ملف نتيجة الدمج). وينميرج أند بيوند مقارنة هي تحت تصرفي ولكن لا يبدو أن تنتج أي شيء ولكن دمج النتائج (التي عادة ما أريد، ولكن ليس هذا الوقت). سوف بلدي الانحدار إطار استدعاء devfmerge. exe وتخزين ملف ديف الناتجة للمراجعة في وقت لاحق. أنا ترميز بلدي بروسيسستارتينفو اتبع ذلك مع بدء العملية والانتظار لإنهاء العملية. وانتظر الانتظار الانتظار. هذا حصلت لي قراءة مسن وحفر أعمق في استخدام فئة العملية. لقد اكتشفت بعض المعلومات المثيرة للاهتمام، وربما كان ينبغي أن يكون واضحا. أولا، وجدت أنه في بعض الأحيان تشغيل بلدي ديفمرج عملية الطفل مع الحجج المختلفة عملت، وأحيانا لم يكن، مما يجعل هذه المسألة غامضة. ثانيا، لقد وجدت أنها عملت بشكل جيد عندما فعلت 8217t إخراج الإخراج. لذلك، من الواضح أنني كنت في عداد المفقودين شيئا. كنت في حاجة لقراءة في الواقع وثائق أبي العملية، وبالتالي وجدت هذه الكتلة: مسن المادة بعد العثور على وقراءة تلك المادة مسن فهمت. سوف نموذج التعليمات البرمجية أعلاه تعمل إذا كان ستدوت أو ستدرور العازلة لا تملأ. ومع ذلك ما كنت أرى كان المخزن المؤقت ستدوت ملء، تم حظر عملية الطفل على الكتابة ستدوتسدورور المقبل، كانت العملية الأم تنتظر بلا حدود على عملية الطفل للخروج قبل القراءة من المخزن المؤقت ستدوتسدورور. بالنسبة لي يبدو أن طريقة ويتفوريكسيت أندور الخروج حدث مكسورة لا اصطياد عملية الطفل الخروج، ولكن كان بلدي التعليمات البرمجية التي تم كسرها. قمت بتعديل التعليمات البرمجية لاستخدام أساليب غير متزامنة وفجأة ذهبت مشاكلي بعيدا. لا مزيد من الحجب، وعمل كل شيء كما هو متوقع. اعتدت سترينغبويلدرز كما مخازن لعقد البيانات الواردة في الأحداث. في الجزء 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