2011-08-04 6 views

Odpowiedz

5

Jeśli przekierować Console.Out do instancji StringWriter można wtedy uzyskać tekst, który został napisany do konsoli:

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

Jeśli zrobisz to w nowej Form można następnie ankietę w odstępach czasu, aby uzyskać tekst zapisany na konsoli i umieścić jego wartość na TextBox. Surowy przykład:

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(); 
} 

kilka rzeczy, aby być ostrożnym z:

  • StringWriter jest jednorazowy, więc technicznie trzeba pozbyć się go po zakończeniu (choć w rzeczywistości jego metoda Dispose() robi nic tak naprawdę nie jest poważnym problemem).
  • StringWriter przechowuje wewnętrzny StringBuilder zawierający cały tekst do niego napisany do tej pory. Z czasem tylko się powiększy, więc im dłużej aplikacja będzie działać, tym więcej pamięci będzie zużywać. Możesz wprowadzić pewne kontrole, aby okresowo je usuwać po osiągnięciu określonego rozmiaru.
  • Jeśli interwał będzie zbyt mały, będziesz ciągle używać procesora.
  • Po zamknięciu formularza należy ustawić wartość Console.Out z powrotem na oryginalną wartość, w przeciwnym razie nie będzie można ponownie drukować komunikatów na konsoli.
+0

dzięki za szczegółową odpowiedź. Dam ci szansę. –

+0

Nie naprawiłem jeszcze problemu z pamięcią typu stringbuilder, ale w zasadzie działa. Wielkie dzięki. Powinienem być w porządku stąd. –

+0

Doskonała odpowiedź btw. –

0

DebugView

DebugView jest aplikacją, która pozwala monitorować wyjście debugowania w systemie lokalnym lub dowolnego komputera w sieci, które można osiągnąć za pomocą protokołu TCP/IP. Jest w stanie wyświetlać zarówno wynik debugowania w trybie jądra, jak i Win32, więc nie potrzebujesz debuggera, aby wychwycić dane wyjściowe debugowania generowane przez aplikacje lub sterowniki urządzeń, ani nie musisz modyfikować aplikacji lub sterowników, aby użyć niestandardowego debugowania wyjściowe interfejsy API.

+0

DbgView nie przechwytuje wyjścia konsoli, tylko Debugowanie i śledzenie. To także nie pozwoli mu pokazać wyjścia konsoli w swojej własnej aplikacji. – adrianbanks

+0

PO nie powiedział, jak generowane są dane wyjściowe i myślałem, że nie ma nic przeciwko zewnętrznemu narzędziu. Zgadzam się jednak, że DbgView nie pokaże wyjścia Console tylko Debug and Trace. –

Powiązane problemy