2011-08-04 13 views
6

मेरे पास कुछ स्क्रीन क्वेरी बनाने में कुछ स्क्रीन हैं जो लंबे समय तक लग सकती हैं। मेरी डीबी परत पहले ही कंसोल पर क्वेरी स्ट्रिंग रखती है (जब मैं डिबगिंग करते समय उन्हें आउटपुट विंडो में देख सकता हूं)। मैं बस एक खिड़की रखना चाहता हूं जो उपयोगकर्ता एक ही चीज़ को देखने के लिए खोल सकता है अगर वे अधीर हो जाते हैं।Winforms में, कंसोल आउटपुट प्रदर्शित करने वाली विंडो बनाने का सबसे तेज़ तरीका क्या है?

ऐसा करने के लिए त्वरित तरीके से कोई सुझाव?

उत्तर

5

आप एक StringWriter की आवृत्ति Console.Out अनुप्रेषित हैं, तो आप फिर पाठ कि कंसोल के लिए लिखा गया है प्राप्त कर सकते हैं:

StringWriter writer = new StringWriter(); 
Console.SetOut(writer); 
StringBuilder consoleOut = writer.GetStringBuilder(); 
string text = consoleOut.ToString(); 

आप इस एक नया Form भीतर करते हैं, आप तो मतदान कर सकते हैं कंसोल पर लिखे गए पाठ को प्राप्त करने के लिए अंतराल पर और अपना मान TextBox में डाल दें। एक कच्चे उदाहरण:

public MyForm() 
{ 
    InitializeComponent(); 

    StringWriter writer = new StringWriter(); 
    Console.SetOut(writer); 

    Timer timer = new Timer(); 
    timer.Tick += (o, s) => textBox.Text = writer.GetStringBuilder().ToString(); 
    timer.Interval = 500; 
    timer.Start(); 
} 

कुछ बातें

साथ सावधान रहना चाहिए:

  • StringWriter डिस्पोजेबल है, इसलिए तकनीकी रूप से आप जब किया (हालांकि वास्तविकता में अपने Dispose() विधि करता है यह के निपटान के लिए की जरूरत है कुछ भी नहीं तो वास्तव में एक बड़ा मुद्दा नहीं है)।
  • StringWriter एक आंतरिक StringBuilder रखता है जिसमें अब तक लिखा गया सभी पाठ शामिल है। यह कभी भी समय के साथ बड़ा हो जाएगा, इसलिए आपका आवेदन जितना लंबा होगा, उतना अधिक स्मृति इसका उपभोग करेगी। जब आप एक निश्चित आकार तक पहुंचते हैं तो आप समय-समय पर इसे साफ़ करने के लिए कुछ चेक डाल सकते हैं।
  • यदि आप अंतराल को बहुत छोटा बनाते हैं, तो आप लगातार CPU का उपयोग करेंगे।
  • जब आप अपना फॉर्म बंद करते हैं तो Console.Out अपने मूल मान पर वापस सेट करना सुनिश्चित करें, अन्यथा आप कंसोल पर संदेश प्रिंट नहीं कर पाएंगे।
+0

आपके विस्तृत उत्तर के लिए धन्यवाद। मैं इसे एक शॉट दूंगा। –

+0

मैंने अभी तक स्ट्रिंगबिल्डर स्मृति समस्या को ठीक नहीं किया है, लेकिन मूल रूप से, यह काम करता है। बहुत बहुत धन्यवाद। मुझे यहाँ से ठीक होना चाहिए। –

+0

उत्कृष्ट उत्तर बीटीडब्ल्यू। –

0

DebugView

DebugView आप अपने स्थानीय सिस्टम पर डिबग आउटपुट, या नेटवर्क है कि आप टीसीपी/आईपी के माध्यम से पहुँच सकते हैं पर किसी भी कंप्यूटर पर नजर रखने की सुविधा देता है कि एक आवेदन पत्र है। यह कर्नेल-मोड और Win32 डीबग आउटपुट दोनों को प्रदर्शित करने में सक्षम है, इसलिए आपको अपने एप्लिकेशन या डिवाइस ड्राइवर उत्पन्न करने वाले डीबग आउटपुट को पकड़ने के लिए डीबगर की आवश्यकता नहीं है, न ही आपको गैर-मानक डीबग का उपयोग करने के लिए अपने एप्लिकेशन या ड्राइवरों को संशोधित करने की आवश्यकता है आउटपुट एपीआई।

+0

DbgView कंसोल आउटपुट, केवल डीबग और ट्रेस कैप्चर नहीं करता है। यह उसे अपने आवेदन के भीतर कंसोल आउटपुट दिखाने की अनुमति नहीं देगा। – adrianbanks

+0

ओपी ने यह नहीं कहा कि आउटपुट कैसे उत्पन्न होता है और मैंने सोचा कि उसे बाहरी उपकरण नहीं दिखेगा। हालांकि, मैं मानता हूं कि DbgView कंसोल आउटपुट केवल डीबग और ट्रेस नहीं दिखाएगा। –

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

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