لدي مشكلة مع قراءة إخراج عملية واحدة بشكل غير متزامن في C. وجدت بعض الأسئلة الأخرى المماثلة على هذا الموقع لكنها لا تساعد حقا لي. هنا هو ما أفعله: جعل عملية جديدة تعيين ستارتينفو - FileName، حجج، كريتنويندو (ترو)، أوسشليكسكيوت (فالس)، ريديركتستانداردوتوتبوت (ترو) إضافة معالج الأحداث إلى أوتبوتداتاريفسيد بدء العملية، بيجينأوتوبترادلين ثم ويتفوريكسيت (). أنه يعمل بشكل جيد ولكن إخراج عملية بدأت يكتب بعض النسب المئوية () التي أريد الحصول عليها ولكن أنا غير قادر منذ رمز بلدي يقرأ سطرا سطرا والنسب المئوية لا تظهر. هنا هو الرمز الحالي لبرنامجي: هناك عدد قليل من الأشياء التي تحصل في الطريق من ذلك. التطبيق وحدة التحكم هو على الارجح باستخدام ب باكسباس الكتابة فوق النسبة المئوية، وربما لا بيغ إلى تيار ستدوت بعد كل الكتابة، و بيجينوتبترادلين ويفترض ينتظر نهاية الخط قبل إعطائك البيانات. انظر كيف يمكنك الحصول على مع عملية القراءة. StandardOutput. BaseStream عبر بيجينريد (هذا الرمز غير مناسب غير المتزامن وسوف تحتاج بس معالجتها بشكل مختلف إذا تقدم التقدم الخاص بك في شكل): سوف process. WaitForExit () الانتظار حتى غير متزامن الناتج تيار خطأ القراءة تم الانتهاء من. لسوء الحظ هذا ليس صحيحا ل process. WaitForExit (المهلة) الزائد. هذا هو ما تفعله فئة العملية داخليا: لذلك سوف ننتظر للقراءة غير متزامن فقط إذا لم يكن هناك مهلة لإصلاحه ببساطة استدعاء ويتفوريكسيت بارامتريليس () بعد ويتفوريكسيت (مهلة) عاد صحيح: إيلينا: شكرا لإجابتك. هناك بعض الملاحظات في الجزء السفلي من مستند مسن هذا (msdn. microsoften - أوسليبراريهليب) التي تحذر حول ديادلوكس المحتملة إذا قرأت إلى نهاية كل من ستدوت إعادة توجيه و ستدر تيارات بشكل متزامن. IT39s من الصعب معرفة ما إذا كان الحل الخاص بك هو عرضة لهذه المسألة. أيضا، يبدو أنك تقوم بإرسال العملية 39 ستدوتستدر إخراج الحق في العودة كمدخلات. لماذا ا. ) نداش ماتيو بيات سيب 26 16 في 4:42 هذا هو أكثر حداثة تنتظر، مكتبة مكتبة موازية تبل (تبل) حل يستند ل. نيت 4.5 وما فوق. مثال الاستخدام أجاب التنفيذ أكتوبر 5 16 في 10:54 أنا شيء أن هذا هو نهج بسيط وأفضل (نحن لسنا بحاجة أوتوريزيتيفنت): أجاب 14 يونيو 12 في 14:29 صحيح، ولكن mustn39t كنت تقوم به. فيلنام المسار quggsci. exequot كوت لوت obeycommand. txtquot لتبسيط التعليمات البرمجية الخاصة بك أو ربما شيء ما يعادل الأمر كوتشو كوت المسار quggsci. exequot إذا كنت حقا don39t تريد استخدام ملف obeycommand. txt منفصل. نداش اميت نيدو يونيو 4 13 في 22:03 الحل الخاص بك لا تحتاج أوتوريزيتيفنت ولكن لك الاستطلاع. عند إجراء الاستطلاع بدلا من استخدام الحدث (عندما تكون متاحة) ثم كنت تستخدم وحدة المعالجة المركزية دون سبب والتي تشير إلى أنك مبرمج سيئة. الحل الخاص بك هو سيء حقا بالمقارنة مع الآخر باستخدام أوتوريزيتيفنت. (لكنني لم أعطيك -1 لأنك حاولت المساعدة). نداش إيريك أويليت نوف 7 14 في 18:38 كنت تواجه نفس المشكلة، ولكن السبب كان مختلفا. ومع ذلك فإنه يحدث تحت ويندوز 8، ولكن ليس تحت ويندوز 7. يبدو أن السطر التالي قد تسبب في المشكلة. كان الحل عدم تعطيل وسشليكسكيوت. تلقيت الآن نافذة منبثقة شل، غير المرغوب فيها، ولكن أفضل بكثير من البرنامج في انتظار لا شيء معين أن يحدث. لذلك أضفت العمل التالي حول ذلك: الآن الشيء الوحيد الذي يزعجني هو لماذا يحدث هذا تحت ويندوز 8 في المقام الأول. أجاب 13 يناير 15 في 10:35 حاولت أن تجعل فئة من شأنها أن تحل مشكلتك باستخدام تيار غير متزامن قراءة، من خلال الأخذ في الاعتبار مارك بييرز، روب، ستيفيفاي الأجوبة. القيام بذلك أدركت أن هناك خلل المتعلقة غير متزامن الناتج إخراج تيار قراءة. لا يمكنك القيام بذلك: سوف تتلقى System. InvalidOperationException. لم تتم إعادة توجيه ستانداردوت أو لم تبدأ العملية بعد. ثم عليك أن تبدأ إخراج غير متزامن قراءة بعد بدء العملية: القيام بذلك، وجعل حالة سباق لأن تيار الإخراج يمكن أن تتلقى البيانات قبل تعيينه إلى غير متزامن: ثم بعض الناس يمكن أن أقول أن لديك فقط لقراءة تيار قبل تعيينه إلى غير متزامن. ولكن نفس المشكلة تحدث. سيكون هناك حالة سباق بين قراءة متزامن وتعيين تيار في وضع غير متزامن. لا توجد طريقة للحصول على قراءة غير متزامنة آمنة من تيار الإخراج من عملية في الطريقة الفعلية وقد تم تصميم عملية و بروسيسستارتينفو. ربما كنت أفضل باستخدام قراءة غير متزامن مثل اقترح من قبل المستخدمين الآخرين لحالتك. ولكن يجب أن تكون على علم بأنك يمكن أن تفوت بعض المعلومات بسبب حالة السباق.
No comments:
Post a Comment