2008-10-11 12 views
5

मुझे इस कार्यक्रम में कुछ पैरामीटर पास करने के लिए एक अन्य एप्लिकेशन (कंसोल) का उपयोग करना होगा और मेरे सी # प्रोग्राम के अंदर उस प्रोग्राम का आउटपुट प्राप्त होगा। मैं कंसोल (उपयोगकर्ता के लिए सभी अदृश्य) नहीं देखना चाहता हूं। मैं उसे कैसे कर सकता हूँ?सी # आप एक अन्य बैच फ़ाइल का आउटपुट कैसे प्राप्त कर सकते हैं?

उत्तर

17
Process myProcess = new Process(); 
ProcessStartInfo myProcessStartInfo = new ProcessStartInfo("YOUPROGRAM_CONSOLE.exe"); 
myProcessStartInfo.UseShellExecute = false; 
myProcessStartInfo.RedirectStandardOutput = true; 
myProcess.StartInfo = myProcessStartInfo; 
myProcess.Start(); 

StreamReader myStreamReader = myProcess.StandardOutput; 
string myString = myStreamReader.ReadLine(); 
Console.WriteLine(myString); 
myProcess.Close(); 

स्रोत: MSDN

संपादित: आप प्राप्त करने के लिए त्रुटि संदेश आप Async आपरेशन का उपयोग करने की आवश्यकता होगी की आवश्यकता होती है। आप इन निर्भरताओं और उनकी डेडलॉक क्षमता से बचने के लिए एसिंक्रोनस रीड ऑपरेशंस का उपयोग कर सकते हैं। वैकल्पिक रूप से, आप दो धागे बनाकर और प्रत्येक धारा के आउटपुट को एक अलग थ्रेड पर पढ़कर डेडलॉक स्थिति से बच सकते हैं।

+1

आप "रीडायरेक्ट मानक Irror" भी सक्षम करना चाहते हैं, और उस स्ट्रीम को पढ़ें, यदि आपकी उप प्रक्रिया त्रुटि संदेशों को उत्पन्न करती है। – gimel

+0

मैंने कुछ जानकारी जोड़ा। एमएसडीएन में यह कहता है कि डेडलॉक से बचने के लिए इसे कई धागे की आवश्यकता होती है। –

+0

यदि आप वास्तव में कंसोल पर आउटपुट करना चाहते हैं, तो आप अतिरिक्त StreamReader-Object के बजाय 'Console.SetIn (myProcess.StandardOutput) का उपयोग कर सकते हैं। –

संबंधित मुद्दे