كيفية استخدام process. Start في فيسوال باسيك بواسطة دان مابوت. فيسوال باسيك إكسيرت قد تكون طريقة بدء كائن العملية واحدة من أكثر الأدوات غير المقدرة المتوفرة لك كمبرمج. كطريقة، بداية لديها سلسلة من التحميل الزائد (مجموعات مختلفة من المعلمات التي تحدد بالضبط ما تفعله الطريقة). في هذه الحالة، تتيح لك التحميلات الزائدة تحديد أي مجموعة من المعلمات التي قد ترغب في تمريرها إلى عملية أخرى عند بدء التشغيل. ما يمكنك القيام به مع process. Start هو حقا محدودة فقط من خلال العمليات التي يمكنك استخدامها معها. مواصلة القراءة أدناه أي القول، هناك isn39t أي حد منذ أكثر تبقي القادمة في كل وقت. إذا كنت ترغب في عرض ملف 34ReadMe34 المستندة إلى نص في المفكرة، it39s سهلا كما يلي: يفترض هذا الملف ريدمي في نفس المجلد مثل البرنامج وأن المفكرة هو التطبيق الافتراضي لأنواع ملفات. txt و it39s في بيئة النظام مسار. ل VB639ers في الجمهور، process. Start هو إلى حد ما مثل الأمر VB6 شل. في VB6، يمكنك استخدام شيء مثل: لنغبيد 61 شل (34MyTextFile. txt34، فنورمالفوكس) لا يزال بإمكانك استدعاء الأمر شل في ف، لكنني لن نوصي بذلك. استخدام process. Start بدلا من ذلك. يمكنك استخدام هذه التعليمات البرمجية بدلا من ذلك لبدء المفكرة إلى أقصى حد وإنشاء كائن بروسستارتينفو التي يمكنك استخدامها للتحكم أكثر دقة: ديم بروسيس بروبيرتيز كما جديد بروسيسستارتينفو processProperties. FileName 61 34notepad34 ProcessProperties. Arguments 61 34myTextFile. txt34 ProcessProperties. WindowStyle 61 ProcessWindowStyle. Maximized ديم ميبروسيس عملية بروسيس 61.بدء (بروسيس بروبيرتيز) مواصلة القراءة أدناه يمكنك حتى بدء عملية مخفية. ProcessProperties. WindowStyle 61 ProcessWindowStyle. Hidden ولكن كن حذرا. إلا إذا قمت بإضافة المزيد من التعليمات البرمجية لإنهاء العملية، you39ll ربما لديك لإنهاء ذلك في إدارة المهام. وعادة ما تستخدم العمليات المخفية فقط مع العمليات التي don39t لديها أي نوع من واجهة المستخدم. العمل مع process. Start ككائن يمنحك الكثير من القدرة. على سبيل المثال، يمكنك استرجاع اسم العملية التي تم تشغيلها. سوف تظهر هذه التعليمات البرمجية 34notepad34 في إطار الإخراج: خاطئة ميبروسيس كما عملية 61 عملية. بدء (34MyTextFile. txt34) Console. WriteLine (myProcess. ProcessName) إذا كنت بحاجة إلى تعليق تنفيذ البرنامج الخاص بك حتى انتهت العملية (شيء يمكنك القيام به مع رمز أبي في VB6)، وهنا يا الذهاب. Console. WriteLine (34Notepad انتهت: 34 أمبير myProcess. ExitTime أمبير environment. NewLine أمب 34 رمز إكسيت: 34 أمب myProcess. ExitCode) كان هذا شيء لا يمكن القيام به مع الأمر VB6 شل لأنه أطلق التطبيق الجديد بشكل غير متزامن. استخدام ويتفوريكسيت يمكن أن يسبب المشكلة العكسية لأن لديك لإطلاق عملية في مؤشر ترابط جديد إذا كنت في حاجة إليها لتنفيذ غير متزامن. على سبيل المثال، إذا كنت بحاجة إلى أن تبقى المكونات نشطة في نموذج حيث تم تشغيل عملية وتم تنفيذ ويتفوريكسيت. عادة، هذه العناصر فاز 39t تكون نشطة. رمز عنه وانظر لنفسك. طريقة واحدة لإجبار عملية لوقف هو استخدام طريقة قتل. هذا الرمز ينتظر لمدة عشر ثوان ثم ينتهي العملية. لقد وجدت أن التأخير القسري كان ضروريا للسماح لعملية إكمال الخروج لتجنب خطأ. myProcess. WaitForExit (10000) 39 إذا لم تتم العملية 39t في غضون 10 10 ثانية، وقتله إذا لم myProcess. HasExited ثم myProcess. Kill () نهاية إذا Threading. Thread. Sleep (1) Console. WriteLine (34Notepad انتهت: 34 أمبير ميبروسيس. ExitTime أمب environment. NewLine أمب 34 رمز إكسيت: 34 أمب myProcess. ExitCode) في معظم الحالات، فإنه ربما يكون فكرة جيدة 39 تجهيز المعالجة في كتلة استخدام للتأكد من أن يتم تحرير الموارد المستخدمة من قبل العملية. استخدام ميبروسيس كما عملية 61 عملية جديدة 39 التعليمات البرمجية الخاصة بك يذهب هنا نهاية استخدام لجعل كل هذا أسهل للعمل مع، هناك حتى عنصر العملية التي يمكنك إضافتها إلى المشروع الخاص بك حتى تتمكن من القيام بالكثير من الأشياء المعروضة أعلاه في التصميم الوقت بدلا من وقت التشغيل. واحدة من الأشياء التي تجعل هذا أسهل كثيرا هو ترميز الأحداث التي أثارتها العملية، مثل الحدث عندما خرجت العملية. يمكنك أيضا إضافة معالج باستخدام رمز مثل هذا. 39 السماح لعملية لرفع الأحداث myProcess. EnableRaisingEvents 61 ترو 39 إضافة معالج الحدث الذي تم الخروج منه أدهاندلر myProcess. Exited، أدرسوف Me. ProcessExited خاصة سوب بروسيسكسيتد (بيفال المرسل ككائن، بيفال ه كما System. EventArgs) 39 التعليمات البرمجية الخاصة بك يذهب هنا نهاية سوب ولكن ببساطة اختيار الحدث للمكون هو أسهل كثيرا. فقد بدا لي أن هذا النظام أسينكروني كان الحل المجيد لمشكلة إيف كان وجود حيث أحتاج إلى بدء عملية خارجية، ثم انتظر حتى تكتمل. حاليا، لدي التعليمات البرمجية التالية على مؤشر ترابط واجهة المستخدم: عملية معالجة عملية جديدة () process. Start () process. WaitForExit () العملية غالبا ما تستغرق عدة ثوان، ولكن يقاوم إيف باستخدام عامل خلفية أو ما شابه ذلك لأنه ببساطة لا يحدث في كثير من الأحيان وهو ما يكفي لتكون جديرة بالجهد والتخليط التعليمات البرمجية. لقد رأيت ذكر طرق الإرشاد في الورقة البيضاء، ولكن يبدو أنه لا توجد طريقة تمديد ل process. RunAsync () أو ما شابه ذلك، وترك كوتاوايت TaskEx. Run (() غ process. WaitForExit ()) كحل الوحيد الذي يبدو مثل إيتل العمل. الغزل حتى موضوع إضافي فقط للاتصال ويتفوريكسيت يبدو غبي بدلا من ذلك. كما أنني لم تجد أي أساليب ثابتة التي تبدو واعدة في أي من أسينكتبكستنسيونس، أسينكتبثريدينجستنسيونس، تاسككس، أو تاسكستنسيونس. هل هناك طريقة (مخططة) أفضل لانتظار الانتهاء من العملية الخارجية الجمعة 29 أكتوبر 2010 6:35 بيإم الجانب السلبي لاستخدام بركة بهذه الطريقة هو أنك سوف تمنع الخيط لمدة العملية. إذا كنت لا تدور العديد من العمليات، وهذا قد لا يكون مشكلة كبيرة، ولكن ثيريس لا تزال هناك حاجة حقيقية للقيام بذلك. بدلا من ذلك، يمكنك استخدام مهمة لا ترتبط بخيط ترابط، على سبيل المثال. (p. هاسيكسيتد) tcs. TrySetResult (نول) ريتورن tcs. Task مع ذلك، يمكنك كتابة: ولن يتم حظر أي المواضيع أثناء انتظار غير متزامن لعملية للخروج. اقتراح من قبل ستيفن توب - موظف مسفت ميكروسوفت، مشرف الجلسة الجمعة، 29 أكتوبر 2010 9:29 م تم وضع علامة كجواب من قبل لوسيان ويسشيك، موظف مسفت ميكروسوفت، المالك السبت، 30 أكتوبر 2010 10:13 م الجمعة 29 أكتوبر 2010 9:28 بيإم كوت غزل حتى مؤشر ترابط إضافي فقط للاتصال ويتفوريكسيت يبدو stupid. quot بدلا من ذلك إذا كنت تستخدم وظيفة تبل القياسية، افتراضيا، إيتل استخدام الموضوع ثريادبول. هناك حقا لا ينبغي أن يكون هناك الكثير من وقت الانتظار إلى كوتسين أوبكوت موضوع. ريدكوبسي إذا كان هناك سؤال يجيب على سؤالك، يرجى النقر على علامة مارك كجواب على هذه المشاركة و كوت علامة كما مفيدة كوت. الجمعة 29 أكتوبر 2010 7:30 بيإم الجانب السلبي لاستخدام بركة السباحة بهذه الطريقة هو أن يتم حظر مؤشر الترابط لمدة العملية. إذا كنت لا تدور العديد من العمليات، وهذا قد لا يكون مشكلة كبيرة، ولكن ثيريس لا تزال هناك حاجة حقيقية للقيام بذلك. بدلا من ذلك، يمكنك استخدام مهمة لا ترتبط بخيط ترابط، على سبيل المثال. (p. هاسيكسيتد) tcs. TrySetResult (نول) ريتورن tcs. Task مع ذلك، يمكنك كتابة: ولن يتم حظر أي المواضيع أثناء انتظار غير متزامن لعملية للخروج. اقتراح من قبل ستيفن توب - موظف مسفت ميكروسوفت، مشرف الجلسة الجمعة، 29 أكتوبر 2010 9:29 م تم وضع علامة كجواب من قبل لوسيان ويسشيك، موظف مسفت ميكروسوفت، المالك السبت، 30 أكتوبر 2010 10:13 م الجمعة 29 أكتوبر 2010 9:28 بيإم
No comments:
Post a Comment