2011-10-25 15 views
6

Używam biblioteki zewnętrznej (.dll), niektóre z jej metod (w tym konstruktorów) zapisują dane na standardowe wyjście (konsola a.k.a), ponieważ przeznaczone były do ​​używania z aplikacjami konsolowymi. Jednak staram się włączyć go do moich aplikacji formularzy systemu Windows, więc chciałbym uchwycić to wyjście i wyświetlić go w sposób, który lubię. To znaczy. pole tekstowe "status" w moim oknie.Przechwytywanie zawartości standardowego wyjścia w C#

Wszystko, co udało mi się znaleźć, to ProcessStartInfo.RedirectStandardOutput, chociaż najwyraźniej nie odpowiada moim potrzebom, ponieważ jest używany z dodatkową aplikacją (.exe) w przykładach. Nie uruchamiam zewnętrznych aplikacji, używam biblioteki DLL.

Odpowiedz

7

Tworzenie StringWriter i ustawić standardowe wyjście do niego.

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

Teraz coś wydrukowane na konsoli zostanie włożona do StringWriter, i można dostać jego zawartość w każdej chwili poprzez wywołanie stringw.ToString() tak to można zrobić coś takiego textBox1.AppendText(stringw.ToString()); (skoro mówiłeś, że miał WinForm i miał status pole tekstowe), aby ustawić zawartość pola tekstowego.

2

Czy użycie metody Console.SetOut pozwoli Ci zbliżyć się do tego, czego szukasz?

Zapewniłoby to możliwość zapisania tekstu zapisanego na konsoli w strumieniu, który i tak można gdzieś napisać.

http://msdn.microsoft.com/en-us/library/system.console.setout.aspx

Fragment powyższy link:

Console.WriteLine("Hello World"); 
FileStream fs = new FileStream("Test.txt", FileMode.Create); 
// First, save the standard output. 
TextWriter tmp = Console.Out; 
StreamWriter sw = new StreamWriter(fs); 
Console.SetOut(sw); 
Console.WriteLine("Hello file"); 
Console.SetOut(tmp); 
Console.WriteLine("Hello World"); 
sw.Close(); 
Powiązane problemy