Tuesday 6 March 2018

بويرشيل ويتوفوريكسيت لا يعمل


بويرشيل ويتفوريكسيت لا يعمل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
لا يعمل ويتفوريكسيت بشكل صحيح.
لذلك لقد تم محاربة هذه القضية لفترة الآن وحاول العديد من الطرق المختلفة لإصلاحه ولكن لا يمكن.
باسكالي وهت بلدي التطبيق لا يدعو ملف جافا لتحميل التطبيق على الجهاز. على الرغم من أنه يتم تحميله في مربع الطباعة ريشتكست، فإنني أود الانتقال إلى الملف التالي. المشكلة التي تواجهها هي أنه في حين يتم تحميل الملف الأول، يحاول 2ND تحميل القضايا التي القضايا. لقد حاولت الانتظار للخروج ولكن إذا كنت تفعل ذلك، ثم لا يتم الحصول على بيانات الإخراج مكتوبة إلى مربع النص الغنية. أيه أفكار؟
حاولت وضع الانتظار للخروج في العديد من الأماكن المختلفة، ولكن لا يبدو أن العمل.
اثنين من الأساليب أدناه كتابة ستدوت أو خطأ إلى الحقل ريتستكست.
اي فكرة يمكن ان تكون رائعة. باسكالي أحتاج إلى عملية للخروج، حتى ذلك الحين يمكنني الاستمرار في التفكير في فورلوب لتحميل الملف التالي.
إذا كنت ويتفوريكسيت كتل التطبيق (ينتظر) حتى خروج العملية. وهذا يعني أنه غير قادر على معالجة أية رسائل ويندوز في مؤشر ترابط واجهة المستخدم، لذلك لا يقوم بتحديث واجهة المستخدم.
يلزمك بدء العملية "في الخلفية" حتى يستمر تحديث واجهة المستخدم. ويمكن القيام بذلك بما يلي:
بدء تشغيل العملية ومتابعتها من مؤشر ترابط منفصل وتمرير معلومات التقدم إلى مؤشر ترابط واجهة المستخدم للعرض إضافة معالج أحداث إلى الحدث الذي تم الخروج منه أو استطلاع علم العملية. علامة هاسكسيتد واستخدامها لمعرفة متى تكون العملية الأولى تم الانتهاء من. سيقوم معالج الحدث الخاص بك ببدء تشغيل هذه العملية ثم قم بالرجوع إلى حلقة التطبيق الرئيسية بحيث يتم تشغيلها كالمعتاد أثناء انتظار الانتهاء من العملية الخارجية.
الجلوس في حلقة الانتظار مشغول حتى يكمل، ومعالجة الأحداث التطبيق. (حذار من ذلك، حيث أن أي أحداث تتسبب في إعادة توجيه المكالمات إلى هذا القانون يمكن أن تفعل أشياء سيئة للغاية. بصفة عامة إذا كنت تستخدم هذا النهج لك نيتو دتو تأكد من أن بقية التطبيق الخاص بك هو "مؤمن" في حالة حيث أنه يعرف ذلك مشغول انتظار عملية لإكمال). هذا هو ما فعله ويتفوريكسيت بشكل فعال، ولكنه أيضا يعالج أحداث التطبيق، مما يسمح واجهة المستخدم لتبقى غامضة تستجيب:
قد أكون مخطئا تماما هنا، ولكن.
يجب أن يكون لديك مسافة بعد - j.
وإلا سوف جافا قصف على الفور.
محاولة نقل استدعاء ويتفوريكسيت من مؤشر ترابط واجهة المستخدم.
وكما ذكر السيد بابكوك، فإنك تحتفظ بتحديثات لمربع النص الغني.
قد یعمل حل مماثل لھذا:
تعديل btnLoad_Click لبدء مؤشر ترابط جديد يعالج القائمة (هذا يسري في العد> فرع 0)

بويرشيل ويتفوريكسيت لا يعمل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
process. WaitForExit لا يعود على الرغم من أن process. HasExited صحيح.
ابدأ استخدام process. Start لبدء ملف دفعي. يستخدم ملف الدفعي الأمر "ستارت" لبدء عدة برامج بالتوازي ثم الخروج.
بمجرد الانتهاء من ملف الدفعي يصبح process. HasExited ترو و process. ExitCode يحتوي على رمز الخروج الصحيح.
ولكن عندما أدعو process. WaitForExit () أنه يتعطل / أبدا يعود.
الجزء التالي من التعليمات البرمجية يوضح المشكلة. فإنه يخلق ملف دفعي، يبدأ ثم ثم يطبع:
وينبغي بعد ذلك طباعة:
. لكنه لا يفعل (على الرغم من هاسكسيتد صحيح ولدينا بالفعل إكسيتكود).
لاحظت أن هذا يحدث فقط عندما يحتوي ملف الدفعي على أوامر "ستارت" وعند إعادة توجيه الإخراج القياسي و / أو الخطأ القياسي.
لماذا لا يتم إرجاع ويتفوريكسيت () أبدا؟
ما هي الطريقة الصحيحة للخروج من هذه العملية للخروج؟
هل هي آمنة لعملية الاستطلاع فقط. هاسيكسيتد أو يمكن أن يؤدي إلى مشاكل أخرى؟
بس: لقد لاحظت فقط أن استدعاء ويتفوريكسيت (100000) مع مهلة ضخمة (التي لا تنتهي بالتأكيد) يعود على الفور عند خروج العملية. غريب. دون مهلة أنها معلقة.
ويبدو أن هذا هو قطعة أثرية (أود أن أقول "علة") في التنفيذ المحدد للمعالجة غير المتزامن القائم على الحدث من ستانداردوتبوت و ستانداردرور.
لاحظت أنه في حين كنت قادرا على إعادة إنتاج المشكلة بسهولة، ببساطة عن طريق تشغيل التعليمات البرمجية التي قدمتها (مثال رمز ممتاز، بالمناسبة! :))، فإن العملية لم تتوقف في الواقع إلى أجل غير مسمى. بدلا من ذلك، عاد من ويتفوريكسيت () مرة واحدة كل من العمليات الطفل التي بدأت قد خرجوا أنفسهم.
ويبدو أن هذا جزء متعمد من تنفيذ فئة العملية. على وجه الخصوص، في طريقة Process. WaitForExit ()، بمجرد الانتهاء من الانتظار على مقبض العملية نفسها، فإنه يتحقق لمعرفة ما إذا كان قد تم إنشاء قارئ إما ستدوت أو ستدر؛ إذا كان الأمر كذلك، وإذا كانت قيمة المهلة للمكالمة ويتفوريكسيت () هي "لانهائية" (أي -1)، فإن المدونة تنتظر فعلا نهاية البث على القارئ (ق).
يتم إنشاء كل قارئ منها فقط عندما يتم استدعاء الأسلوب بيجينوتبترادلين () أو بيجينيرورادلين (). و ستدوت والجداول ستدير هي نفسها ليست مغلقة حتى أغلقت عمليات الطفل. حتى الانتظار في نهاية تلك الجداول سوف كتلة حتى يحدث ذلك.
أن يتفوريكسيت () يجب أن تتصرف بشكل مختلف اعتمادا على ما إذا كان أحد قد دعا إما من الأساليب التي تبدأ القراءة القائم على الحدث من تيارات أم لا، وخصوصا بالنظر إلى أن قراءة تلك التدفقات مباشرة لا يسبب ويتفوريكسيت () على التصرف بهذه الطريقة، يخلق عدم الاتساق في أبي الذي يجعل من الصعب فهمها واستخدامها. في حين أنني شخصيا استدعاء هذا الخلل، وأعتقد أنه من الممكن أن منفذي (ق) من الطبقة العملية على بينة من هذا التناقض وخلقها عن قصد.
في أي حال، فإن العمل حول سيكون لقراءة ستانداردوتبوت و ستانداردورور مباشرة بدلا من استخدام جزء الحدث القائم على أبي. (على الرغم من بطبيعة الحال، إذا كان رمز واحد ينتظر على تلك الجداول، واحد سوف يرى نفس السلوك حظر حتى الطفل يعالج وثيقة.)
على سبيل المثال (C #، لأنني لا أعرف F # جيدا بما يكفي لصفعة مثال رمز مثل هذا معا بسرعة :)):
نأمل أن العمل أعلاه أو حول شيء مماثل سوف تعالج المسألة الأساسية التي واجهت. شكرنا للمعلق نيلز فورغارد كريستنسن لتوجيهي إلى خطوط إشكالية في طريقة ويتفوريكسيت ()، حتى أتمكن من تحسين هذه الإجابة.

بويرشيل ويتفوريكسيت لا يعمل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
الحصول على إكسيتكود باستخدام بدء العملية و ويتفوريكسيت بدلا من - Wait.
أحاول تشغيل برنامج من بويرشيل، انتظر للخروج، ثم الحصول على إكسيتكود، ولكن ليس لديها الكثير من الحظ. أنا لا أريد أن استخدام - Wait مع بدء العملية، وأنا بحاجة إلى بعض المعالجة على الاستمرار في الخلفية.
في ما يلي نص برمجي مبسط:
سيؤدي تشغيل هذا البرنامج النصي إلى بدء تشغيل المفكرة. بعد إغلاق هذا يدويا، سيتم طباعة رمز الخروج، وسوف تبدأ مرة أخرى، دون استخدام - wait. لا يتم توفير إكسيتكود عند إنهاء هذا:
أنا بحاجة إلى أن تكون قادرة على أداء معالجة إضافية بين بدء البرنامج والانتظار لإنهاء، لذلك لا أستطيع الاستفادة من - Wait. أي فكرة كيف يمكنني القيام بذلك ولا يزال الوصول إلى الخاصية. ExitCode من هذه العملية؟
أمرين يمكن أن تفعله أعتقد.
إنشاء كائن System. Diagnostics. Process يدويا وتجاوز بدء العملية تشغيل قابل للتنفيذ في مهمة الخلفية (فقط للعمليات غير التفاعلية!)
في ما يلي كيفية القيام بما يلي:
هناك أمران يجب تذكرهما هنا. واحد هو لإضافة الوسيطة - PassThru واثنان هو إضافة الوسيطة - Wait. تحتاج إلى إضافة وسيطة الانتظار بسبب هذا العيب connect. microsoft/PowerShell/feedback/details/520554/start-process-does-not-return-exitcode-property.
بمجرد القيام بذلك يتم تمرير كائن عملية مرة أخرى ويمكنك إلقاء نظرة على الخاصية إكسيتكود من هذا الكائن. هنا مثال:
إذا قمت بتشغيله دون - PassThru أو - Wait، فإنه سيتم طباعة أي شيء.
أثناء محاولة الخروج من الاقتراح النهائي أعلاه، اكتشفت حلا أبسط حتى. كل ما كان علي القيام به كان مخبأ مقبض العملية. حالما فعلت ذلك، $ process. ExitCode عملت بشكل صحيح. إذا لم أكن مخبأ مقبض العملية، كان $ process. ExitCode فارغ.
أو حاول إضافة هذا.
باستخدام هذا الرمز، لا يزال بإمكانك السماح بويرشيل رعاية إدارة إخراج / تيارات خطأ إعادة توجيه، والتي لا يمكنك القيام به باستخدام System. Diagnostics. Process. Start () مباشرة.
يبدو الخيار "-Wait" لمنع بالنسبة لي على الرغم من أن عمليتي قد انتهى.
حاولت حل أدريان وأنه يعمل. ولكنني انتظرت عملية بدلا من الاعتماد على أثر جانبي لاسترجاع مقبض العملية.

بويرشيل ويتفوريكسيت لا يعمل
يتم استخدام التحميل الزائد ويتفوريكسيت () () () لجعل انتظار مؤشر الترابط الحالي حتى تنتهي العملية المقترنة. تقوم هذه الطريقة بإرشاد مكون العملية إلى الانتظار لوقت غير محدود من الوقت لإنهاء العملية. قد يؤدي هذا إلى توقف التطبيق عن الاستجابة. على سبيل المثال، إذا قمت باستدعاء كلوسمينويندو لعملية تحتوي على واجهة مستخدم، قد لا يتم التعامل مع الطلب إلى نظام التشغيل إنهاء العملية المقترنة إذا تمت كتابة العملية عدم إدخال حلقة الرسائل.
يضمن هذا التحميل الزائد أن جميع عمليات المعالجة قد اكتملت، بما في ذلك التعامل مع الأحداث غير المتزامنة للإخراج القياسي المعاد توجيهه. يجب استخدام هذا التحميل الزائد بعد إجراء مكالمة إلى التحميل الزائد ويتفوريكسيت (Int32) عند إعادة توجيه الإخراج القياسي إلى معالجات الأحداث غير المتزامنة.
هذا بالطبع ل. ما الذي يجعلك تعتقد أنه لا ينتظر حتى تنتهي عملية المذكرة؟ ما هي علامات ذلك؟ ما هو الدليل؟
عملية p = عملية جديدة ()؛
MessageBox. Show (& كوت؛ يجب إغلاق المتصفح & كوت؛)؛
باستثناء أنك لا ثم الحصول على كائن العملية التي يمكنك استخدامها. إن جربت.
خافت ميبروك كعملية جديدة ()
ميبروك = process. Start (& كوت؛ إيكسلور & كوت ؛، & كوت؛ finance. yahoo/q/hp؟ s = & كوت؛ + رمز)؛
تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب.

No comments:

Post a Comment