بروسيس ويتفوريكسيت إكسامبل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
كيفية استخدام Process. WaitForExit.
أنا استدعاء التطبيق الجزء الثالث الذي "أحيانا" يعمل في ف (انها وف استضافت النفس). ولكن في بعض الأحيان سوف 3rd الطرف التطبيق شنق إلى الأبد، لذلك لقد أضفت الموقت 90 ثانية لذلك. المشكلة هي، كيف أعرف ما إذا كان الوقت مهلة؟
يبدو الرمز كما يلي:
ما أود القيام به هو شيء من هذا القبيل.
تحقق من قيمة طريقة العودة - msdn. microsoft/en-us/library/ty0d8k56.aspx - إذا انتهت المهلة، فإنه سيعود خطأ.
كانت هناك مشاكل معروفة في الماضي حيث التطبيقات تجميد عند استخدام ويتفوريكسيت.
بروسيس ويتفوريكسيت إكسامبل
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
انتظر حتى تنتهي العملية.
لدي تطبيق الذي لا.
لبدء تطبيق آخر "أبك". أريد أن تنتظر حتى ينتهي هذا التطبيق (عملية يموت) ومواصلة تنفيذ بلدي. كيف يمكنني فعل ذلك؟
قد يكون هناك حالات متعددة من تطبيق "أبك" قيد التشغيل في نفس الوقت.
أعتقد أنك تريد هذا فقط:
راجع صفحة مسن للطريقة. كما أن لديها الزائد حيث يمكنك تحديد مهلة، لذلك كنت لا يحتمل أن تنتظر إلى الأبد.
استخدام Process. WaitForExit؟ أو الاشتراك في الحدث Process. Exited إذا كنت لا تريد حظر؟ إذا كان هذا لا يفعل ما تريد، يرجى تعطينا المزيد من المعلومات حول الاحتياجات الخاصة بك.
أفعل ما يلي في طلبي:
هناك بعض الميزات الإضافية التي قد تجدها مفيدة.
يمكنك استخدام الانتظار للخروج أو يمكنك التقاط الخاصية هاسكسيتد وتحديث واجهة المستخدم الخاصة بك للحفاظ على المستخدم "أبلغ" (إدارة التوقعات):
كيفية استخدام process. Start في فيسوال باسيك.
عندما تحتاج إلى بدء تطبيق آخر باستخدام رمز ف.
قد تكون طريقة بدء الكائن بروسيس واحدة من أكثر الأدوات غير المقدرة المتوفرة لمبرمج. كطريقة، بداية لديها سلسلة من التحميل الزائد، والتي هي مجموعات مختلفة من المعلمات التي تحدد بالضبط ما تفعله الطريقة. يسمح لك التحميل الزائد بتحديد أي مجموعة من المعلمات التي قد ترغب في تمريرها إلى عملية أخرى عند بدء التشغيل.
ما يمكنك القيام به مع process. Start هو حقا محدودة فقط من خلال العمليات التي يمكنك استخدامها معها.
إذا كنت ترغب في عرض ملف ريدم المستند إلى نص في المفكرة، فإنه من السهل كما:
يفترض هذا الملف ريدمي في نفس المجلد مثل البرنامج و "المفكرة" هو التطبيق الافتراضي لأنواع ملفات. txt و في مسار بيئة النظام.
process. Start على غرار شل القيادة في VB6.
للمبرمجين على دراية فيسوال باسيك 6، process. Start هو إلى حد ما مثل الأمر ف 6 شل. في ف 6، يمكنك استخدام شيء مثل:
استخدام process. Start.
يمكنك استخدام هذه التعليمات البرمجية لبدء المفكرة تعظيم وإنشاء كائن بروسستارتينفو التي يمكنك استخدامها للتحكم أكثر دقة:
بدء عملية مخفية.
يمكنك حتى بدء عملية خفية.
لكن كن حذرا. ما لم تضيف المزيد من الشفرة لإنهاء العملية، فربما يتعين عليك إنهاءها في إدارة المهام. وعادة ما تستخدم العمليات المخفية فقط مع العمليات التي لا تحتوي على أي نوع من واجهة المستخدم.
استرجاع اسم العملية.
العمل مع process. Start ككائن يمنحك الكثير من القدرة. على سبيل المثال، يمكنك استرجاع اسم العملية التي تم تشغيلها. سيعرض هذا الرمز & # 34؛ نوتيباد & # 34؛ في نافذة الإخراج:
كان هذا شيء لا يمكنك القيام به مع الأمر VB6 شل لأنه أطلق التطبيق الجديد بشكل غير متزامن. استخدام ويتفوريكسيت يمكن أن يسبب المشكلة العكسية لأن لديك لإطلاق عملية في مؤشر ترابط جديد إذا كنت في حاجة إليها لتنفيذ غير متزامن. على سبيل المثال، إذا كنت بحاجة إلى أن تبقى المكونات نشطة في نموذج حيث تم تشغيل عملية وتم تنفيذ ويتفوريكسيت. عادة، لن تكون هذه المكونات نشطة. رمز عنه وانظر لنفسك.
طريقة واحدة لإجبار عملية لوقف هو استخدام طريقة قتل.
هذا الرمز ينتظر لمدة عشر ثوان ثم ينتهي العملية.
لقد وجدت أن التأخير القسري كان ضروريا للسماح لعملية إكمال الخروج لتجنب خطأ.
في معظم الحالات، قد يكون من الأفضل وضع المعالجة في كتلة استخدام لضمان تحرير الموارد التي تستخدمها العملية.
لجعل كل هذا أسهل للعمل مع، هناك حتى عنصر العملية التي يمكنك إضافتها إلى المشروع الخاص بك حتى تتمكن من القيام بالكثير من الأشياء المعروضة أعلاه في وقت التصميم بدلا من وقت التشغيل.
واحدة من الأشياء التي تجعل هذا أسهل كثيرا هو ترميز الأحداث التي أثارتها العملية، مثل الحدث عندما خرجت العملية. يمكنك أيضا إضافة معالج باستخدام شفرة مثل هذا:
ولكن ببساطة اختيار الحدث للمكون هو أسهل كثيرا.
بروسيس ويتفوريكسيت إكسامبل
ضمن تطبيق أنا أكتب، وأنا بحاجة إلى القيام بما يلي:
تنفيذ تطبيق واجهة المستخدم الرسومية الخارجية (لأغراض هذا المثال يتيح تفترض مس ورد). حظر مؤشر الترابط الحالي حتى يتم إغلاق تطبيق واجهة المستخدم الرسومية الخارجية.
كانت أول محاولة لي للقيام بذلك استخدام كائن System. Diagnostics. Process.
// تهيئة كائن العملية.
myProcess. StartInfo. FileName = & كوت؛ C: \\ بروغرام فيليز \\ ميكروسوفت أوفيس \\ OFFICE11 \\ Winword. exe & كوت ؛؛
myProcess. StartInfo. WorkingDirectory = & كوت؛ C: \\ بروغرام فيليز \\ ميكروسوفت أوفيس \\ OFFICE11 & كوت ؛؛
// ابدأ العملية وانتظر حتى يتم إغلاقها.
System. Windows. Forms. MessageBox. Show (& كوت؛ أغلق تطبيق المستخدم & كوت؛)؛
عند تنفيذ التعليمات البرمجية أعلاه، يتم تشغيل مس ورد كما هو متوقع. ومع ذلك، لا يبدو استدعاء ويتفوريكسيت () للقيام بعملها كما أحصل على مربع رسالة المنبثقة على الفور بعد بدء تشغيل عملية مس ورد وليس بعد إغلاقه.
لماذا لا انتظار انتظار ويتفوريكسيت () عملية مسورد؟ هو حقيقة أنا إطلاق التطبيق واجهة المستخدم الرسومية بدلا من التطبيق سطر الأوامر كبيرة؟
أي مساعدة سيكون موضع تقدير كبير.
جميع الردود.
بعد بعض التجارب لقد استنتجت ذلك لأنه ليس هناك وثيقة المستخدم تحميلها. إذا قمت بعمل معلمة اسم الملف مستند فعلي يعمل كما هو متوقع:
// ابدأ العملية وانتظر حتى يتم إغلاقها.
System. Windows. Forms. MessageBox. Show (& كوت؛ أغلق تطبيق المستخدم & كوت؛)؛
ما إذا كان سيتم تحميل وثيقة أو لا ينبغي أن يهم إذا كان ذلك؟ الكائن عملية يوفر فقط وسيلة عامة لتنفيذ ورصد العمليات، فإنه لا يعرف أي شيء عن الداخلية ما تحميل ورد بالتأكيد؟
في أي حال، لقد حاولت التعليمات البرمجية كما نصحت وتلقي استثناء "لا عملية المرتبطة هذا الكائن"، ويفترض لأنه تم تمرير اسم ملف مستند بدلا من قابل للتنفيذ.
(وأود أن أذكر أيضا أنني فقط باستخدام ورد كمثال هنا لحل هذه المشكلة بالذات، ولذا فإنني لا أريد أن يحصل على معلقة جدا على ما يحدث على ورت ورد نفسها. وقد حاولت وفشلت في استخدام ويتفوريكسيت () مع مجموعة متنوعة من تطبيقات واجهة المستخدم الرسومية.)
حسنا، لقد حصلت للتو المنزل وحاولت ذلك على جهاز الكمبيوتر بيتي، ولن تعرف أنه يعمل رمز! لست متأكدا لماذا يسبب مشاكل على جهاز الكمبيوتر المحمول العمل.
في أي حال، شكرا لك مساعدة دمان.
مقترح كرد من براد ماثيوز الجمعة، 19 ديسمبر، 2008 12:55 ص.
أوبجبروسيس أس نيو System. Diagnostics. ProcessStartInfo (& كوت؛ Winword. exe & كوت؛، & كوت؛ / t c: \ ميدوك. doc & كوت؛)
تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب.
معالجة . طريقة ويتفوريكسيت (Int32)
تحتوي الوثائق المرجعية أبي على منزل جديد. انتقل إلى متصفح أبي على docs. microsoft للاطلاع على التجربة الجديدة.
يرشد مكون العملية إلى الانتظار لعدد الملي ثانية المحدد للعملية المقترنة للخروج.
الجمعية: النظام (في System. dll)
المعلمات.
مقدار الوقت، بالمللي ثانية، لانتظار انتهاء العملية المقترنة. الحد الأقصى هو أكبر قيمة ممكنة لعدد صحيح 32 بت، والذي يمثل اللانهاية لنظام التشغيل.
قيمة الإرجاع.
صحيح إذا خرجت العملية المرتبطة بها؛ خلاف ذلك، كاذبة.
تعذر الوصول إلى إعداد الانتظار.
لم يتم تعيين معرف العملية، ولا يمكن تحديد التعامل الذي يمكن تحديد الخاصية إد.
لا توجد عملية مقترنة كائن العملية هذه.
أنت تحاول الاتصال ويتفوريكسيت (Int32) لعملية قيد التشغيل على كمبيوتر بعيد. تتوفر هذه الطريقة فقط للعمليات التي يتم تشغيلها على الكمبيوتر المحلي.
ويتفوريكسيت (Int32) يجعل الانتظار مؤشر الترابط الحالي حتى ينتهي العملية المقترنة. وينبغي أن يسمى بعد أن يتم استدعاء جميع الطرق الأخرى على العملية. لتجنب حظر مؤشر الترابط الحالي، استخدم الحدث الذي تم الخروج منه.
تقوم هذه الطريقة بتوجيه مكون العملية لانتظار مقدار محدود من الوقت لإنهاء العملية. إذا لم يتم إنهاء العملية المقترنة بنهاية الفترة الزمنية بسبب رفض طلب الإنهاء، يتم إرجاع فالس إلى إجراء الاستدعاء. يمكنك تحديد رقم سلبي (لانهائي) لميلي ثانية، وعملية. سوف يتصرف ويتفوريكسيت (Int32) نفس الزائد ويتفوريكسيت (). إذا قمت بتمرير 0 (صفر) إلى الأسلوب، فإنه يرجع صحيح فقط إذا كانت العملية قد خرجت بالفعل؛ وإلا فإنه يعود فورا كاذبة.
في الإطار 3.5 والإصدارات السابقة، إذا كان ميلي ثانية واحدة -1، انتظر التحميل الزائد ويتفوريكسيت (Int32) ل ماكسفالو ميلي ثانية (حوالي 24 يوما)، وليس إلى أجل غير مسمى.
عند إعادة توجيه الإخراج القياسي إلى معالجات أحداث غير متزامنة، فمن الممكن أن معالجة الإخراج لم تكتمل عند إرجاع هذه الطريقة. لضمان اكتمال معالجة الحدث غير المتزامن استدعاء الزائد ويتفوريكسيت () الذي لا يأخذ أي معلمة بعد تلقي صحيح من هذا التحميل الزائد. للمساعدة في ضمان التعامل مع الحدث الذي تم الخروج منه بشكل صحيح في تطبيقات نماذج ويندوز، قم بتعيين الخاصية سينكرونيزينغوبجيكت.
عند إنهاء عملية مقترنة (يتم إيقاف تشغيلها بواسطة نظام التشغيل من خلال إنهاء عادي أو غير طبيعي)، يخزن النظام المعلومات الإدارية حول العملية ويعود إلى المكون الذي كان يسمى ويتفوريكسيت (Int32). يمكن لمكون العملية ثم الوصول إلى المعلومات، والتي تتضمن إكسيتيمي، باستخدام مقبض إلى العملية خرجت.
لأن العملية المرتبطة قد خرجت، الخاصية مقبض المكون لم يعد يشير إلى مورد عملية موجود. بدلا من ذلك، يمكن استخدام المقبض فقط للوصول إلى معلومات نظام التشغيل حول مورد العملية. النظام على بينة من مقابض للخروج من العمليات التي لم يتم إصدارها من قبل مكونات العملية، لذلك فإنه يحتفظ إكسيتيمي والتعامل مع المعلومات في الذاكرة حتى يقوم مكون العملية بتحرير الموارد على وجه التحديد. لهذا السبب، في أي وقت استدعاء بدء تشغيل مثيل عملية استدعاء إغلاق عند انتهاء العملية المقترنة ولم تعد بحاجة إلى أية معلومات إدارية حول هذا الموضوع. إغلاق يحرر الذاكرة المخصصة لعملية خرجت.
راجع مثال التعليمات البرمجية الخاصية إكسيتكود.
للحصول على الثقة الكاملة للمتصل الفوري. لا يمكن استخدام هذا العضو من خلال شفرة موثوق بها جزئيا.
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
انتظر حتى تنتهي العملية.
لدي تطبيق الذي لا.
لبدء تطبيق آخر "أبك". أريد أن تنتظر حتى ينتهي هذا التطبيق (عملية يموت) ومواصلة تنفيذ بلدي. كيف يمكنني فعل ذلك؟
قد يكون هناك حالات متعددة من تطبيق "أبك" قيد التشغيل في نفس الوقت.
أعتقد أنك تريد هذا فقط:
راجع صفحة مسن للطريقة. كما أن لديها الزائد حيث يمكنك تحديد مهلة، لذلك كنت لا يحتمل أن تنتظر إلى الأبد.
استخدام Process. WaitForExit؟ أو الاشتراك في الحدث Process. Exited إذا كنت لا تريد حظر؟ إذا كان هذا لا يفعل ما تريد، يرجى تعطينا المزيد من المعلومات حول الاحتياجات الخاصة بك.
أفعل ما يلي في طلبي:
هناك بعض الميزات الإضافية التي قد تجدها مفيدة.
يمكنك استخدام الانتظار للخروج أو يمكنك التقاط الخاصية هاسكسيتد وتحديث واجهة المستخدم الخاصة بك للحفاظ على المستخدم "أبلغ" (إدارة التوقعات):
كيفية استخدام process. Start في فيسوال باسيك.
عندما تحتاج إلى بدء تطبيق آخر باستخدام رمز ف.
قد تكون طريقة بدء الكائن بروسيس واحدة من أكثر الأدوات غير المقدرة المتوفرة لمبرمج. كطريقة، بداية لديها سلسلة من التحميل الزائد، والتي هي مجموعات مختلفة من المعلمات التي تحدد بالضبط ما تفعله الطريقة. يسمح لك التحميل الزائد بتحديد أي مجموعة من المعلمات التي قد ترغب في تمريرها إلى عملية أخرى عند بدء التشغيل.
ما يمكنك القيام به مع process. Start هو حقا محدودة فقط من خلال العمليات التي يمكنك استخدامها معها.
إذا كنت ترغب في عرض ملف ريدم المستند إلى نص في المفكرة، فإنه من السهل كما:
يفترض هذا الملف ريدمي في نفس المجلد مثل البرنامج و "المفكرة" هو التطبيق الافتراضي لأنواع ملفات. txt و في مسار بيئة النظام.
process. Start على غرار شل القيادة في VB6.
للمبرمجين على دراية فيسوال باسيك 6، process. Start هو إلى حد ما مثل الأمر ف 6 شل. في ف 6، يمكنك استخدام شيء مثل:
استخدام process. Start.
يمكنك استخدام هذه التعليمات البرمجية لبدء المفكرة تعظيم وإنشاء كائن بروسستارتينفو التي يمكنك استخدامها للتحكم أكثر دقة:
بدء عملية مخفية.
يمكنك حتى بدء عملية خفية.
لكن كن حذرا. ما لم تضيف المزيد من الشفرة لإنهاء العملية، فربما يتعين عليك إنهاءها في إدارة المهام. وعادة ما تستخدم العمليات المخفية فقط مع العمليات التي لا تحتوي على أي نوع من واجهة المستخدم.
استرجاع اسم العملية.
العمل مع process. Start ككائن يمنحك الكثير من القدرة. على سبيل المثال، يمكنك استرجاع اسم العملية التي تم تشغيلها. سيعرض هذا الرمز & # 34؛ نوتيباد & # 34؛ في نافذة الإخراج:
كان هذا شيء لا يمكنك القيام به مع الأمر VB6 شل لأنه أطلق التطبيق الجديد بشكل غير متزامن. استخدام ويتفوريكسيت يمكن أن يسبب المشكلة العكسية لأن لديك لإطلاق عملية في مؤشر ترابط جديد إذا كنت في حاجة إليها لتنفيذ غير متزامن. على سبيل المثال، إذا كنت بحاجة إلى أن تبقى المكونات نشطة في نموذج حيث تم تشغيل عملية وتم تنفيذ ويتفوريكسيت. عادة، لن تكون هذه المكونات نشطة. رمز عنه وانظر لنفسك.
طريقة واحدة لإجبار عملية لوقف هو استخدام طريقة قتل.
هذا الرمز ينتظر لمدة عشر ثوان ثم ينتهي العملية.
لقد وجدت أن التأخير القسري كان ضروريا للسماح لعملية إكمال الخروج لتجنب خطأ.
في معظم الحالات، قد يكون من الأفضل وضع المعالجة في كتلة استخدام لضمان تحرير الموارد التي تستخدمها العملية.
لجعل كل هذا أسهل للعمل مع، هناك حتى عنصر العملية التي يمكنك إضافتها إلى المشروع الخاص بك حتى تتمكن من القيام بالكثير من الأشياء المعروضة أعلاه في وقت التصميم بدلا من وقت التشغيل.
واحدة من الأشياء التي تجعل هذا أسهل كثيرا هو ترميز الأحداث التي أثارتها العملية، مثل الحدث عندما خرجت العملية. يمكنك أيضا إضافة معالج باستخدام شفرة مثل هذا:
ولكن ببساطة اختيار الحدث للمكون هو أسهل كثيرا.
Comments
Post a Comment