C # ريديريكتانداردوتوتبوت ويتفوريكسيت


C # ريديريكتارداردوتبوت ويتفوريكسيت
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
بروسيسستارتينفو المهلة ويتفوريكسيت.
أنا بحاجة إلى طباعة ملف بدف مع بروسيسستارتينفو.
اسم الملف والحجج صحيحة تعمل عند لصقها في سمد. تعمل التعليمات البرمجية بشكل صحيح ولكن بعد process. Start عندما يتعلق الأمر ويتفوريكسيت البرنامج لا تنتهي. أحصل على خطأ المهلة:
System. Threading. ThreadAbortException: تم إحباط الموضوع. (System. Deagnostics. Process. WaitForExit (Int32 ميلي ثانية).
لقد بحثت وحاول بعض الأشياء مثل الإعداد & لوت؛ هتبرونتيمي إيكسكوتيونيموت = "300" / & غ؛ وتنفذ في 500 أو مثل في التعليمات البرمجية مع process. WaitForExit (6000)؛ وأعلى من ذلك حيث لا إكسيبتيون ولكن لا شيء حصلت المطبوعة.
هل هناك خطأ أو أنا في عداد المفقودين شيء؟
إديت: لقد غيرت شفرة التعليمات البرمجية أعلاه. الآن يعمل رمز في وضع التصحيح ولكن لا يزال فاز طباعة المستند الخاص بي عند نشرها. حاولت أيضا استخدام مستخدم مختلف. في وضع التصحيح يطبع الرمز المستند ولكن يعمل في الاستعلام قتل.
يقوم بروسستارتينفو. فيربس بإرجاع استثناء الوسيطة ولكن لا أعرف السبب.
بعد الكثير من المحاولة والاختبار والبحث أنا متأكد من بلدي يعمل رمز. لذلك ما زلت لا أعرف حقا لماذا بلدي التعليمات البرمجية توقفت عن العمل. ولكن التغيير من أدوبي ريدر 9.0 على الخادم إلى 7.0 يعمل الآن.
عندما كنت ديبوغينغ محليا مع أدوبي ريدر 9.0 أنها عملت أيضا، لذلك أعتقد أنه ربما كان هناك تحديث على خادم الويب. أنا ديدنت التحقق من ذلك حتى الآن.

C # ريديريكتارداردوتبوت ويتفوريكسيت
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
process. start: كيفية الحصول على الإخراج؟
أود تشغيل برنامج سطر الأوامر الخارجية من بلدي مونو / التطبيق. على سبيل المثال، أود أن تشغيل مينكودر. هل هو ممكن:
للحصول على إخراج سطر الأوامر قذيفة، والكتابة على مربع النص الخاص بي؟ للحصول على القيمة العددية لإظهار شريط التقدم مع مرور الوقت المنقضي؟
عند إنشاء كائن بروسيس تعيين ستارتينفو بشكل مناسب:
ثم بدء العملية وقراءتها منه:
يمكنك استخدام int. Parse () أو int. TryParse () لتحويل السلاسل إلى قيم رقمية. قد تحتاج إلى القيام ببعض التلاعب بالسلسلة أولا إذا كانت هناك أحرف رقمية غير صالحة في السلاسل التي تقرأها.
يمكنك معالجة الإخراج بشكل متزامن أو بشكل غير متزامن.
لاحظ أنه من الأفضل معالجة كل من الإخراج والأخطاء: يجب التعامل معها بشكل منفصل.
(*) بالنسبة لبعض الأوامر (هنا StartInfo. Arguments) يجب إضافة التوجيه / c، وإلا يتم تجميد العملية في ويتفوريكسيت ().
إذا كنت لا تحتاج إلى القيام بعمليات معقدة مع الإخراج، يمكنك تجاوز أسلوب أوتبوتهاندلر، فقط إضافة معالجات مباشرة مضمنة:
الطريقة المعيارية للقيام بذلك هي القراءة من عملية "ستانداردوتبوت تيار. هناك مثال في مستندات مسن المرتبطة. مماثلة، يمكنك أن تقرأ من ستانداردرور، والكتابة إلى ستانداردينبوت.
حسنا، لكل من يريد كل من الأخطاء والمخرجات قراءة، ولكن يحصل ديادلوكس مع أي من الحلول، المنصوص عليها في إجابات أخرى (مثلي)، وهنا هو الحل الذي بنيت بعد قراءة شرح مسن لخاصية ستانداردوتبوت.
الإجابة مبنية على كود T30:
يمكنك استخدام الذاكرة المشتركة لعمليات 2 للاتصال من خلال، تحقق من ميموريماببدفيل.
فسوف تقوم أساسا بإنشاء ملف ملف الذاكرة مف في العملية الأصل باستخدام عبارة "استخدام" ثم إنشاء العملية الثانية حتى ينتهي والسماح لها كتابة النتيجة إلى مف باستخدام بيناريوريتر ثم قراءة النتيجة من مف باستخدام العملية الأم ، يمكنك أيضا تمرير اسم مف باستخدام وسيطات سطر الأوامر أو التعليمات البرمجية الثابت ذلك.
تأكد عند استخدام الملف المعين في العملية الأصل التي تقوم بها عملية الطفل كتابة النتيجة إلى الملف المعين قبل أن يتم تحرير الملف المعين في العملية الأصل.
مثال: عملية الأصل.
لاستخدام هذه العينة، ستحتاج إلى إنشاء حل مع 2 مشاريع داخل، ثم يمكنك اتخاذ نتيجة بناء لعملية الطفل من٪ تشيلدير٪ / بن / التصحيح ونسخه إلى٪ بارينتدركتوري٪ / بن / ديبوغ ثم قم بتشغيل المشروع الأم.
تشيلدير و بارنتدركتوري هي أسماء المجلدات من المشاريع الخاصة بك على جهاز الكمبيوتر حظا سعيدا :)
هذا يعتمد على مينكودر. إذا كان يلغي هذه الحالة على سطر الأوامر ثم نعم :)

C # ريديريكتارداردوتبوت ويتفوريكسيت
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
ستانداردOutput. ReadToEnd () معلقة [مكررة]
هذا السؤال له إجابة هنا:
لدي برنامج يستخدم في كثير من الأحيان برنامج خارجي ويقرأ مخرجاته. أنه يعمل بشكل جيد جدا باستخدام العملية المعتادة إعادة توجيه الإخراج الخاص بك، ولكن واحدة حجة محددة لسبب ما تعليق عندما أحاول قراءته، أي رسالة خطأ - لا استثناء، انها مجرد 'توقف' عندما تصل إلى هذا الخط. أنا بالطبع استخدام وظيفة مركزية للاتصال وقراءة الإخراج من البرنامج، وهذا هو:
الخط الذي يعلق هو ريسولت = proc. StandardOutput. ReadToEnd ()؛ ، ولكن مرة أخرى، وليس في كل مرة، إلا عندما أرسلت حجة محددة ("بدء الخادم"). تعمل جميع الوسيطات الأخرى على ما يرام - فهي تقرأ القيمة وترجعها. انها أيضا غريبة الطريقة التي يتعطل. فإنه لا تجميد أو إعطاء خطأ أو أي شيء، فإنه يتوقف فقط معالجة. كما لو كان الأمر 'العودة'، إلا أنها لا تعود حتى إلى وظيفة الدعوة، فإنه يتوقف فقط كل شيء مع واجهة لا تزال قائمة وتشغيلها. أي شخص واجه هذا من قبل؟ أي شخص لديه أي فكرة ما يجب أن أحاول؟ أنا أفترض أنه شيء غير متوقع داخل التيار نفسه، ولكن هل هناك طريقة يمكنني التعامل معها / تجاهل هذا بحيث يقرأها على أي حال؟
تم وضع علامة عليه كنسخ من قبل بيتر دونيهو c # يمكن للمستخدمين مع شارة C # إغلاق بمفرده C # الأسئلة كما مكررة وإعادة فتح لهم حسب الحاجة. 27 يونيو في 2:45.
وقد طرح هذا السؤال من قبل، ولديه بالفعل جواب. إذا كانت هذه الإجابات لا تعالج سؤالك بشكل كامل، فيرجى طرح سؤال جديد.
الحلول المقترحة مع بيجينأوتوبترادلين () هي وسيلة جيدة ولكن في حالات مثل هذا، فإنه لا ينطبق، لأن العملية (بالتأكيد مع استخدام ويتفوريكسيت ()) مخارج في وقت سابق من الناتج غير المتزامن الانتهاء تماما.
لذلك، حاولت تنفيذها بشكل متزامن وجدت أن الحل هو في استخدام طريقة نظرة خاطفة () من فئة ستريمريدر. لقد أضفت التحقق من بيك () & غ؛ -1 للتأكد من أنه ليس نهاية تيار كما هو الحال في مقالة مسن وصفها وأخيرا أنه يعمل ووقف شنقا!
إليك الرمز:
المشكلة هي أنك تستخدم أساليب ريادتويند متزامنة على كل من ستانداردوتبوت وتيار ستانداردرور. هذا يمكن أن يؤدي إلى الجمود المحتمل كنت تعاني. يتم وصف هذا حتى في مسن. ويرد وصف الحل هناك. في الأساس، هو: استخدام الإصدار غير متزامن بيجينأوتوبترادلين لقراءة البيانات من تيار ستانداردوتبوت:
لقد واجهت نفس المشكلة في طريق الجمود. هذا مقتطف الشفرة عملت بالنسبة لي.
ماذا عن شيء مثل:
كان لي نفس النوع من المشكلة أن الخطأ كان مجرد شنقا.
بناء على ردكم على دانيال هيلغارث لم أكن حتى محاولة استخدام تلك الرموز على الرغم من أنني أعتقد أنها قد عملت بالنسبة لي.
منذ أريد أن أكون قادرة على القيام ببعض الانتاج مربي الحيوانات لا يزال في نهاية المطاف قررت أن أفعل ذلك مع كل من النواتج التي يتم القيام بها في موضوع الخلفية.
هذا عملت بالنسبة لي وسمح لي أن لا تضطر إلى استخدام مهلة للقراءة.
شيء أنيق وعملت بالنسبة لي هو:
هذه الإجابة وجدت هنا وخدعة يستخدم فلوش () وإغلاق () على المدخلات القياسية.
حل الإجابة المقبولة لم ينجح بالنسبة لي. اضطررت إلى استخدام المهام من أجل تجنب الجمود:
مع وظيفة جيتستريموتبوت على النحو التالي:
فقط في حالة شخص يتعثر على هذا السؤال في حين ويلينغ لاستخدام نماذج ويندوز و تكستبوكس (أو ريتكستبوكس) لإظهار الأخطاء والمخرجات العملية يعود في الوقت الحقيقي (كما هي مكتوبة إلى process. StandardOutput / process. StandardError).
تحتاج إلى استخدام أوتبوتداتاريسيفد () / إرورداتاريسيفد () لقراءة كل من تيارات دون ديادلوكس، ليس هناك طريقة (بقدر ما أعرف) لتجنب ديادلوكس خلاف ذلك، حتى فيدور الجواب، الذي يحمل الآن "الإجابة" العلامة و معظم يحب حتى الآن، لا تفعل خدعة بالنسبة لي.
ومع ذلك، عند استخدام ريتكتكستبوكس (أو مربع نص) لإخراج البيانات، مشكلة أخرى واجهتها هي كيفية كتابة البيانات في الواقع في مربع النص في الوقت الحقيقي (بمجرد وصولها). تتلقى الوصول إلى البيانات داخل واحد من المواضيع الخلفية أوتبوتداتاريفيسد () / إرورداتاريفسد () ويمكنك فقط أبندتكست () من مؤشر الترابط الرئيسي.
ما حاولت القيام به أولا كان استدعاء process. Start () من مؤشر ترابط الخلفية ثم استدعاء بيجينفوك () = & غ؛ أبندتكست () في أوتبوتداتاريسيفد () / إرورداتاريفيسد () المواضيع بينما كان مؤشر الترابط الرئيسي process. WaitForExit ().
ومع ذلك، أدى هذا إلى شكل بلدي تجميد وفي نهاية المطاف معلقة للأبدية. بعد بضعة أيام من المحاولة انتهى بي الأمر مع الحل أدناه، وهذا يبدو أن تعمل بشكل جيد للغاية.
في وقت قصير، تحتاج إلى إضافة الرسائل إلى مجموعة متزامنة داخل أوتبوتداتاريفيسيون () / إرورداتاريفيسد () المواضيع في حين أن مؤشر الترابط الرئيسي يجب أن تحاول باستمرار لاستخراج الرسائل من تلك المجموعة وإلحاقها في مربع النص:

مثال الاستخدام.
أنا حلها بهذه الطريقة:
أنا أعيد توجيه كل من المدخلات والمخرجات والخطأ وتناولت القراءة من الإخراج وتدفقات الخطأ. يعمل هذا الحل ل سك 7-8، سواء بالنسبة ويندوز 7 و ويندوز 8.
حاولت جعل الطبقة التي من شأنها حل مشكلتك باستخدام تيار غير متزامن قراءة، من خلال اتخاذ في حساب علامة بييرز، روب، ستيفيفاي الأجوبة. القيام بذلك أدركت أن هناك خلل المتعلقة غير متزامن الناتج إخراج تيار قراءة.
لا يمكنك القيام بذلك:
سوف تتلقى System. InvalidOperationException: لم تتم إعادة توجيه ستانداردوت أو لم تبدأ العملية حتى الآن.
ثم لديك لبدء إخراج غير متزامن قراءة بعد بدء العملية:
القيام بذلك، جعل حالة سباق لأن تيار الإخراج يمكن أن تتلقى البيانات قبل تعيينه إلى غير متزامن:
ثم بعض الناس يمكن أن أقول أن لديك فقط لقراءة تيار قبل تعيينه إلى غير متزامن. ولكن نفس المشكلة تحدث. سيكون هناك حالة سباق بين قراءة متزامن وتعيين تيار في وضع غير متزامن.
لا توجد طريقة للحصول على قراءة غير متزامنة آمنة من تيار الإخراج من عملية في الطريقة الفعلية "عملية" و "بروسيسستارتينفو" تم تصميم.
ربما كنت أفضل باستخدام قراءة غير متزامن مثل اقترح من قبل المستخدمين الآخرين لحالتك. ولكن يجب أن تكون على علم بأنك يمكن أن تفوت بعض المعلومات بسبب حالة السباق.
أي من الإجابات أعلاه هو القيام بهذه المهمة.
الحل روب معلقة وحل "مارك بييرز 'الحصول على استثناء التخلص منها. (حاولت" حلول "من الإجابات الأخرى).
لذلك قررت أن أقترح حل آخر:
هذا رمز تصحيحها ويعمل تماما.
أنا شيء أن هذا هو نهج بسيط وأفضل (نحن لسنا بحاجة أوتوريزيتيفنت):
كنت تواجه نفس المشكلة، ولكن السبب كان مختلفا. ومع ذلك فإنه يحدث تحت ويندوز 8، ولكن ليس تحت ويندوز 7. يبدو أن السطر التالي قد تسبب في المشكلة.
كان الحل عدم تعطيل وسشليكسكيوت. تلقيت الآن نافذة منبثقة شل، غير المرغوب فيها، ولكن أفضل بكثير من البرنامج في انتظار لا شيء معين أن يحدث. لذلك أضفت العمل التالي حول ذلك:
الآن الشيء الوحيد الذي يزعجني هو لماذا يحدث هذا تحت ويندوز 8 في المقام الأول.
المقدمة.
الإجابة المقبولة حاليا لا تعمل (يلقي استثناء) وهناك الكثير من الحلول ولكن لا يوجد رمز كامل. ومن الواضح أن هذا يضيع الكثير من الوقت الناس لأن هذا هو السؤال الشعبي.
الجمع بين إجابة مارك بييرز وإجابة كارول تيل كتبت الكود الكامل على أساس كيف أريد استخدام الأسلوب Process. Start.
لقد استخدمته لإنشاء الحوار التقدم حول أوامر جيت. هذه هي الطريقة التي استخدمتها:
من الناحية النظرية يمكنك أيضا الجمع بين ستدوت وستدير، ولكن لم اختبر ذلك.
وأنا أعلم أن هذا العشاء القديم ولكن بعد قراءة هذه الصفحة بأكملها لا شيء من الحلول كان يعمل بالنسبة لي، على الرغم من أنني لم أحاول محمد ريحان كما كان من الصعب قليلا على رمز لمتابعة، على الرغم من أنني أعتقد أنه كان على الطريق الصحيح . عندما أقول أنها لم تعمل هذا ليس صحيحا تماما، وأحيانا أنها سوف تعمل بشكل جيد، وأعتقد أنه هو شيء للقيام به مع طول الإخراج قبل علامة إوف.
على أي حال، كان الحل الذي عملت بالنسبة لي لاستخدام المواضيع المختلفة لقراءة ستانداردوتبوت و ستانداردرور وكتابة الرسائل.
نأمل أن يساعد هذا الشخص، الذي يعتقد أن هذا يمكن أن يكون من الصعب جدا!
الحلول الأخرى (بما في ذلك EM0 في) لا يزال مسدودا لتطبيقي، بسبب مهلات الداخلية واستخدام كل من ستانداردوتبوت و ستانداردرور من تطبيق ولدت. هنا هو ما عمل لي:
تحرير: إضافة التهيئة من ستارتينفو إلى نموذج التعليمات البرمجية.
هذه الوظيفة ربما عفا عليها الزمن ولكن اكتشفت السبب الرئيسي لماذا عادة تعليق هو بسبب تجاوز كومة ل ريديريكتستانداردوتبوت أو إذا كان لديك ريديريكتستانداردورور.
كما بيانات الإخراج أو بيانات الخطأ كبيرة، وسوف يسبب وقت تعليق لأنه لا يزال يعالج لمدة غير محددة.

Comments

Popular Posts