عملية ويتفوريكسيت لا تنتظر


لدي حالة حيث أريد تنفيذ ملف ثم قم بحذف الملف القابل للتنفيذ عند تنفيذ التنفيذ. يمكنني استخدام 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 بيإم تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب. هل ترغب في المشاركةProcess. WaitForExit () لا يعمل رسس process. WaitForExit () لا يعمل يونيو 01، 2004 07:30 بيإم 124 مكرين 124 لينك لدي نموذج ASP. NET الذي يبدأ بطريقة غير المتزامنة التي تدور من خلال قائمة قابلة للتنفيذ الملفات ويبدأ تشغيلها في زر انقر أدعو بلدي أسلوب غير المتزامنة طريقة بلدي لديه حلقة التالية لسبب ما لا يبدو الانتظار للخروج أن تفعل أي شيء. هذه الحلقة لا تنتظر على الإطلاق. إذا كان لدي 4 ملفات للتنفيذ ملفات كوت. فبسوت، فإنها جميعا تبدأ كثيرا في نفس الوقت. أي أفكار حول لماذا لا يبدو أن العمل سيكون مفيدا. حاولت تشغيل هذا من خلال خدمة ويندوز وكان لديه نفس المشكلة. يجب أن يكون في عداد المفقودين شيء. طريقة ويتفوريكسيت () ويتفوريكسيت () يجعل الانتظار مؤشر الترابط الحالي حتى ينتهي العملية المقترنة. وينبغي أن يسمى بعد أن يتم استدعاء جميع الطرق الأخرى على العملية. لتجنب حظر مؤشر الترابط الحالي، استخدم الحدث الذي تم الخروج منه. تقوم هذه الطريقة بإرشاد مكون العملية إلى الانتظار لوقت غير محدود من الوقت للخروج من العملية ومعالجات الأحداث. قد يؤدي هذا إلى توقف التطبيق عن الاستجابة. على سبيل المثال، إذا قمت باستدعاء كلوسمينويندو لعملية تحتوي على واجهة مستخدم، قد لا يتم التعامل مع الطلب إلى نظام التشغيل إنهاء العملية المقترنة إذا تمت كتابة العملية عدم إدخال حلقة الرسائل. في 3.5 نيت فريميورك والإصدارات السابقة، ينتظر التحميل الزائد ويتفوريكسيت () ل ميكسكوندو ماكسفالو (حوالي 24 يوما)، وليس إلى أجل غير مسمى. أيضا، الإصدارات السابقة لم تنتظر معالجات الحدث للخروج إذا تم الوصول إلى الوقت ماكسفالو الكامل. يضمن هذا التحميل الزائد أن جميع عمليات المعالجة قد اكتملت، بما في ذلك التعامل مع الأحداث غير المتزامنة للإخراج القياسي المعاد توجيهه. يجب استخدام هذا التحميل الزائد بعد إجراء مكالمة إلى التحميل الزائد ويتفوريكسيت (Int32) عند إعادة توجيه الإخراج القياسي إلى معالجات الأحداث غير المتزامنة. عند إنهاء عملية مقترنة (أي عندما يتم إيقاف تشغيله بواسطة نظام التشغيل من خلال إنهاء عادي أو غير طبيعي)، يقوم النظام بتخزين المعلومات الإدارية حول العملية والعودة إلى المكون الذي كان يسمى ويتفوريكسيت (). يمكن لمكون العملية ثم الوصول إلى المعلومات التي تتضمن إكسيتيمي. باستخدام مقبض إلى العملية خرجت. لأن العملية المرتبطة قد خرجت، الخاصية مقبض المكون لم يعد يشير إلى مورد عملية موجود. بدلا من ذلك، يمكن استخدام المقبض فقط للوصول إلى معلومات أنظمة التشغيل حول مورد العملية. النظام على بينة من مقابض للخروج من العمليات التي لم يتم إصدارها من قبل مكونات العملية، لذلك فإنه يحتفظ إكسيتيمي والتعامل مع المعلومات في الذاكرة حتى يقوم مكون العملية بتحرير الموارد على وجه التحديد. لهذا السبب، في أي وقت استدعاء بدء تشغيل مثيل عملية استدعاء إغلاق عند انتهاء العملية المقترنة ولم تعد بحاجة إلى أية معلومات إدارية حول هذا الموضوع. إغلاق يحرر الذاكرة المخصصة لعملية خرجت.

Comments

Popular Posts