2011-10-25 10 views
6

Sto usando la libreria esterna (.dll), alcuni dei suoi metodi (compresi i costruttori) scrivono roba su output standard (a.k.a console) perché era destinato ad essere utilizzato con le console. Tuttavia sto cercando di incorporarlo nelle mie applicazioni Windows Form, quindi vorrei catturare questa uscita e visualizzarla nel modo che preferisco. Cioè campo di testo "stato" all'interno della mia finestra.Catturare il contenuto dell'output standard in C#

Tutto quello che sono riuscito a trovare era ProcessStartInfo.RedirectStandardOutput, anche se apparentemente non si adatta alle mie esigenze, perché è utilizzato con un'applicazione aggiuntiva (.exe) negli esempi. Non sto eseguendo app esterne, sto solo usando una libreria DLL.

risposta

7

Creare un StringWriter, e impostare lo standard output ad esso.

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

Ora, qualsiasi cosa stampata per console sarà inserito nel StringWriter, e si può ottenere il suo contenuto in qualsiasi momento chiamando stringw.ToString() così allora si potrebbe fare qualcosa di simile textBox1.AppendText(stringw.ToString()); (dal momento che hai detto che avevi una WinForm e aveva uno status campo di testo) per impostare il contenuto della tua casella di testo.

2

Utilizzerebbe il metodo Console.SetOut per avvicinarsi abbastanza a ciò che si sta cercando?

Fornirebbe la possibilità di ottenere il testo scritto nella console in un flusso che si potrebbe scrivere da qualche parte comunque.

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

Estratto dal link qui sopra:

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