نيت System. Diagnostics. Process فئة 8211 الجزء 1 process. WaitForExit و. حدث حدث aren8217t العمل اعتقدت أنني قد وجدت هذا هو الحال ولكن كان خطأي، وربما نفس الشيء بالنسبة لك أيضا. سوف أذهب إلى ما وجدت أثناء استكشاف وحل هذه المسألة. الجواب القصير: إذا كنت تقوم بإعادة توجيه ستانداردوتبوت أندور ستاندارديرور، استخدم أفضل أساليب غير المتزامنة process. BeginErrorReadLine () و. BeginOutputReadLine () قبل استدعاء. WaitForExit () والتقاط الإخراج عن طريق ربط الأحداث process. ErrorDataReceived و. OutputDataReceived. الجواب الطويل يبدأ معي باستخدام فيسوال ستوديو divfmerge. exe في المجلد Common7IDE لمقارنة الملفات النصية في وضع دفعة. أنا إدخال اختبار الانحدار في عملية دفعة بدأت دفعة. كنت بحاجة إلى أداة من شأنها أن تبصق ملف اختلاف النص عند مقارنة ملفين (وليس ملف نتيجة الدمج). وينميرج أند بيوند مقارنة هي تحت تصرفي ولكن لا يبدو أن تنتج أي شيء ولكن دمج النتائج (التي عادة ما أريد، ولكن ليس هذا الوقت). سوف بلدي الانحدار إطار استدعاء devfmerge. exe وتخزين ملف ديف الناتجة للمراجعة في وقت لاحق. أنا ترميز بلدي بروسيسستارتينفو اتبع ذلك مع بدء العملية والانتظار لإنهاء العملية. وانتظر الانتظار الانتظار. هذا حصلت لي قراءة مسن وحفر أعمق في استخدام فئة العملية. لقد اكتشفت بعض المعلومات المثيرة للاهتمام، وربما كان ينبغي أن يكون واضحا. أولا، وجدت أنه في بعض الأحيان تشغيل بلدي ديفمرج عملية الطفل مع الحجج المختلفة عملت، وأحيانا لم يكن، مما يجعل هذه المسألة غامضة. ثانيا، لقد وجدت أنها عملت بشكل جيد عندما فعلت 8217t إخراج الإخراج. لذلك، من الواضح أنني كنت في عداد المفقودين شيئا. كنت في حاجة لقراءة في الواقع وثائق أبي العملية، وبالتالي وجدت هذه الكتلة: مسن المادة بعد العثور على وقراءة تلك المادة مسن فهمت. سوف نموذج التعليمات البرمجية أعلاه تعمل إذا كان ستدوت أو ستدرور العازلة لا تملأ. ومع ذلك ما كنت أرى كان المخزن المؤقت ستدوت ملء، تم حظر عملية الطفل على الكتابة ستدوتسدورور المقبل، كانت العملية الأم تنتظر بلا حدود على عملية الطفل للخروج قبل القراءة من المخزن المؤقت ستدوتسدورور. بالنسبة لي يبدو أن طريقة ويتفوريكسيت أندور الخروج حدث مكسورة لا اصطياد عملية الطفل الخروج، ولكن كان بلدي التعليمات البرمجية التي تم كسرها. قمت بتعديل التعليمات البرمجية لاستخدام أساليب غير متزامنة وفجأة ذهبت مشاكلي بعيدا. لا مزيد من الحجب، وعمل كل شيء كما هو متوقع. اعتدت سترينغبويلدرز كما مخازن لعقد البيانات الواردة في الأحداث. في الجزء 2، واجهت قضية مع عمليات ستدوتسدورور ريادلين التطبيقات حول احتياجاتي المحددة، وأذهب إلى كيفية حل هذه المشكلة. إذا كنت كتابة برنامج الذي يبدأ عدد غير معروف من العمليات في تسلسل باستخدام myProcess. Start () و ميبروسيس. WaitForExit (). ويبدو أن المشكلة هي أن بعض العمليات قد تبدأ عمليات أخرى ومن ثم الخروج، مما تسبب في برنامجي لمواصلة دون العملية التي بدأت في الواقع إنجاز مهمتها. هل هناك أي طريقة لمراقبة هذه كوتسوب-بروسيسكوت شكرا مقدما تحرير: بعد بعض الاختبارات الإضافية اكتشفت أن نفس المشكلة تحدث عندما على سبيل المثال بدء تشغيل Winword. exe. ببساطة ويتفوريكسيت لا يعمل مع بعض التطبيقات. كتب توم عن نفس المشكلة في هذا الموضوع ولكن كان راضيا عندما عملت على جهاز كمبيوتر مختلف. يبدو أن عملية QUWINWORD. EXEquot قيد التشغيل بالفعل على الجهاز الخاص بي. ربما لأنني استخدم ورد كمحرر البريد الإلكتروني (). إغلاق هذا قبل تشغيل برنامجي (التي تم تكوينها لبدء كلمة وانتظر للخروج) كوتسولفسكوت المشكلة. ومع ذلك، لا أستطيع افتراض أن وينورد لا يعمل عندما يبدأ برنامجي. الخميس، أغسطس 09، 2007 8:01 آم لا، ثيريس ليس كثيرا يمكنك القيام به بشكل موثوق به. المشكلة هي، في الوقت الذي استدعاء ويتفوريكسيت التطبيق قد يكون قد بدأت بالفعل تطبيق آخر وخرجت ثيريس أي وسيلة لمعرفة ما إذا كان هذا التطبيق ولدت أي الآخرين في هذه المرحلة. لها طبيعة process. Start. أنت لا تجد أن ويتفوريكسيت ينتظر إلى أجل غير مسمى لأن العملية قد حان وذهب قبل أن ندعو أنها أنت الخميس، أغسطس 09، 2007 1:15 بعد الظهر حسنا، فإنه لا يخلق عملية جديدة، لها فقط بهذه السرعة قد لا تظهر في عملية المستكشف. كل عملية. بدءا هو أن يطلب من العملية لبدء ثيريس أكثر من ذلك أن العملية الجديدة مطلوب القيام به. إذا كان لا يريد التمسك في الذاكرة، وهذا هو اختيارها. لا شيء شيء يمكنك القيام به حيال ذلك، للأسف. بعض التطبيقات تبدأ دائما عملية جديدة. عند فتح ملف فيسوال ستوديو سلن، على سبيل المثال، فإنه يبدأ دائما عمليتين. ثيرس تطبيق صغير يتحقق من نوع ملف سلن ثم يفتح إصدار مناسب من فيسوال ستوديو لأنه لا يمكن إقران تطبيق واحد فقط لكل ملحق. المسألة الأخرى هي أن بعض التطبيقات يمكن التعامل مع وثائق متعددة في وقت واحد، مما يعني أنها عموما إعادة استخدام العمليات الموجودة. في مثل هذه الحالات، إذا تم إعادة استخدام العملية لأنه تم فتح مستند بالفعل، فهذا يعني أن المستند الذي قمت بفتحه مع process. Start قد يكون مغلقا، ولكن عملية استضافة لا تزال قيد التشغيل (خدمة المستند الأصلي) مما يعني أنك لا يمكن أبدا معرفة متى تتم إعادة استخدام العملية عند استدعاء process. Start يتم مع المستند الذي تم فتحه مع process. Start الخاص بك. إذا كنت تبحث لدمج نوع من حل وينورد، أود أن أقترح استخدام الأتمتة. راجع msdn. microsoftnewsgroupsdefault. aspxdgmicrosoft. public. officedevamplangenampcrUS للمناقشات حول أتمتة منتجات أوفيس. الخميس، أغسطس 09، 2007 1:37 بيإم عليك أن تتبع عدد العمليات التي تم إطلاقها واستخدام هذا في منطقك. قد تستخدم أيضا ويتفورمولتيبلوبجيكتس إذا كنت تعرف مسبقا أبروكسيناتيلي كيف سيتم بدء العديد من العمليات. من وقت بدء العملية، عملية أقفال كائن ويزيد العداد. كلما تنتهي العملية فإنه يقفل الكائن وينقص العداد. عندما تم تشغيل العملية x عدد المرات قيل لها أن تنتظر يستيقظ، يقفل الكائن ويتحقق لمعرفة عدد موبوجيتس هناك، من الانتظار لهذا العدد من الكائنات مرة أخرى. الخميس، أغسطس 09، 2007 12:39 بيإم لا، ثيريس ليس كثيرا يمكنك القيام به بشكل موثوق. المشكلة هي، في الوقت الذي استدعاء ويتفوريكسيت التطبيق قد يكون قد بدأت بالفعل تطبيق آخر وخرجت ثيريس أي وسيلة لمعرفة ما إذا كان هذا التطبيق ولدت أي الآخرين في هذه المرحلة. لها طبيعة process. Start. أنت لا تجد أن ويتفوريكسيت ينتظر إلى أجل غير مسمى لأن العملية قد حان وذهب قبل أن يطلق عليه أنت الخميس، أغسطس 09، 2007 1:15 بيإم لا، آمل أن لا يحدث هذا الوضع (هل من الممكن حتى هافنت فكر من قبل). . على أي حال، أن يجيب بوضوح واحدة من المشاكل. شكرا لكم. ولكن يجب أن يكون هناك سولوتيون إلى المسألة المتعلقة بدء winword. exe (وما شابه ذلك) ذلك. يتم عرض أي عملية إضافية في تاسماناجر (ولكن لا يزال كلمة تظهر). أريد أن أجبر على إنشاء عملية جديدة يمكنني السيطرة عليها. الخميس، أغسطس 09، 2007 1:25 بيإم حسنا، فإنه يخلق عملية جديدة، لها فقط بهذه السرعة قد لا تظهر في عملية مستكشف. كل عملية. بدءا هو أن يطلب من العملية لبدء ثيريس أكثر من ذلك أن العملية الجديدة مطلوب القيام به. إذا كان لا يريد التمسك في الذاكرة، وهذا هو اختيارها. لا شيء شيء يمكنك القيام به حيال ذلك، للأسف. بعض التطبيقات تبدأ دائما عملية جديدة. عند فتح ملف فيسوال ستوديو سلن، على سبيل المثال، فإنه يبدأ دائما عمليتين. ثيرس تطبيق صغير يتحقق من نوع ملف سلن ثم يفتح إصدار مناسب من فيسوال ستوديو لأنه لا يمكن إقران تطبيق واحد فقط لكل ملحق. المسألة الأخرى هي أن بعض التطبيقات يمكن التعامل مع وثائق متعددة في وقت واحد، مما يعني أنها عموما إعادة استخدام العمليات الموجودة. في مثل هذه الحالات، إذا تم إعادة استخدام العملية لأنه تم فتح مستند بالفعل، فهذا يعني أن المستند الذي قمت بفتحه مع process. Start قد يكون مغلقا، ولكن عملية استضافة لا تزال قيد التشغيل (خدمة المستند الأصلي) مما يعني أنك لا يمكن أبدا معرفة متى تتم إعادة استخدام العملية عند استدعاء process. Start يتم مع المستند الذي تم فتحه مع process. Start الخاص بك. إذا كنت تبحث لدمج نوع من حل وينورد، أود أن أقترح استخدام الأتمتة. راجع msdn. microsoftnewsgroupsdefault. aspxdgmicrosoft. public. officedevamplangenampcrUS للمناقشات حول أتمتة منتجات أوفيس. الخميس، أغسطس 09، 2007 1:37 بيإم كذلك صحيح أن فرامورك لا يسمح لإيجاد العمليات الفرعية مباشرة، شيء يمكن أن كوبلد معا. يمكنك الحصول على بيد من العملية التي بدأت، ثم باستخدام بينفوك يمكنك معرفة بيد بيد من جميع العمليات تشغيل ومقارنتها. هل يمكن بعد ذلك الانتظار لتلك بريوسيسس الفرعية للخروج هنا هو مثال C لاستخدام أبي. عليك أن تبحث في شيء مثل بينفوك عن كيفية تحويلها الخميس، أغسطس 09، 2007 4:20 بيإم تقوم ميكروسوفت بإجراء استطلاع عبر الإنترنت لفهم رأيك لموقع مسن على الويب. إذا اخترت المشاركة، سيتم تقديم الاستبيان عبر الإنترنت لك عند مغادرة موقع مسن على ويب. هل ترغب في المشاركة
No comments:
Post a Comment