2013-01-07 15 views
6

संभव डुप्लिकेट कंसोल के लिए उत्पादन लेखन:
How do I show console output/window in a forms application?एक सी # WinForms आवेदन से

वहाँ एक सी # WinForms कार्यक्रम कंसोल विंडो में लिखने के लिए के लिए एक तरीका है?

+2

अच्छी पोस्ट है, लेकिन यह पहले से ही यहाँ कहा गया है: http://stackoverflow.com/questions/4362111/how-do-i-show-console-output-window-in-a-forms-application –

+1

@RobertHarvey: जब तक मुझे कुछ याद नहीं आ रहा है, वह पोस्ट पुनर्निर्देशन मुद्दे को संबोधित नहीं करता है ... – cedd

+0

क्या पुनर्निर्देशन समस्या? आपने अपने प्रश्न में इसके बारे में कुछ भी नहीं कहा। ओह समझा; आपने स्वयं उत्तर दिया खैर, जब तक आप दूसरों से अतिरिक्त उत्तरों की उम्मीद नहीं कर रहे हैं ... –

उत्तर

15

मूल रूप से दो चीजें हैं जो यहां हो सकती हैं।

  1. कंसोल आउटपुट

यह एक WinForms कार्यक्रम कंसोल विंडो है कि यह बनाया (या एक अलग कंसोल विंडो के लिए, या वास्तव में एक नया कंसोल विंडो को आवश्यक होने पर) के लिए खुद को संलग्न करने के लिए के लिए संभव है। एक बार कंसोल विंडो कंसोल से जुड़े हुए हैं। राइटलाइन() आदि अपेक्षा के अनुसार काम करता है। इस दृष्टिकोण के लिए एक गोचा यह है कि कार्यक्रम तुरंत कंसोल विंडो पर नियंत्रण देता है, और उसके बाद इसे लिखने पर चलता है, इसलिए उपयोगकर्ता कंसोल विंडो में भी टाइप कर सकता है। मैं इसे सोचने के लिए/प्रतीक्षा पैरामीटर के साथ शुरू का उपयोग कर सकता हूं।

Link to start Command syntax

  1. रीडायरेक्ट सांत्वना उत्पादन

यह वह जगह है जब कोई पाइप अपने कार्यक्रम कहीं और, जैसे से उत्पादन।

yourapp> file.txt

इस मामले में एक कंसोल विंडो को अटैच किया जा रहा प्रभावी रूप से पाइपिंग ध्यान नहीं देता। इस काम को करने के लिए आप स्ट्रीम को एक हैंडल प्राप्त करने के लिए Console.OpenStandardOutput() को कॉल कर सकते हैं जिसे आउटपुट को पाइप किया जाना चाहिए। यह केवल तभी काम करता है जब आउटपुट पाइप हो, इसलिए यदि आप दोनों परिदृश्यों को संभालना चाहते हैं तो आपको मानक आउटपुट खोलने और इसे लिखने और कंसोल विंडो से अटैचमेंट करने की आवश्यकता है। इसका मतलब यह है कि आउटपुट को पाइप में कंसोल विंडो और पर भेजा जाता है लेकिन यह सबसे अच्छा समाधान है जो मुझे मिल सकता है। कोड के नीचे मैं ऐसा करने के लिए उपयोग करता हूं।

// This always writes to the parent console window and also to a redirected stdout if there is one. 
// It would be better to do the relevant thing (eg write to the redirected file if there is one, otherwise 
// write to the console) but it doesn't seem possible. 
public class GUIConsoleWriter : IConsoleWriter 
{ 
    [System.Runtime.InteropServices.DllImport("kernel32.dll")] 
    private static extern bool AttachConsole(int dwProcessId); 

    private const int ATTACH_PARENT_PROCESS = -1; 

    StreamWriter _stdOutWriter; 

    // this must be called early in the program 
    public GUIConsoleWriter() 
    { 
     // this needs to happen before attachconsole. 
     // If the output is not redirected we still get a valid stream but it doesn't appear to write anywhere 
     // I guess it probably does write somewhere, but nowhere I can find out about 
     var stdout = Console.OpenStandardOutput(); 
     _stdOutWriter = new StreamWriter(stdout); 
     _stdOutWriter.AutoFlush = true; 

     AttachConsole(ATTACH_PARENT_PROCESS); 
    } 

    public void WriteLine(string line) 
    { 
     _stdOutWriter.WriteLine(line); 
     Console.WriteLine(line); 
    } 
} 
+0

धन्यवाद, यह एक अच्छा समाधान है! –

+0

मानक आउटपुट या कंसोल को लिखना है या नहीं, यह निर्दिष्ट करने के लिए आप एक कमांड लाइन विकल्प पढ़ सकते हैं – JoelFan