1. 将Console输出绑定到TextWriter
需要用到Console的关键属性SetOut。SetOut要求参数TextWriter,所以Write的信息都会被写入此TextWriter中。我使用StringWriter,它可以绑定到一个StringBilder。
StringBuilder outSb=newStringBuilder();
StringWriter Sw=new StringWriter(outSb);
Console.SetOut(Sw);
Console.WriteLine(“Console Test!”);
textBox1.Text=outSb.ToString;
这样textBox1就能显示Console Write的信息了。但是,这还只能在TextBox中显示以前Console.Write的信息。
2.即时显示Console.Write的信息
这里用一个线程来监视,即时显示Console.Write()的信息。每500毫秒刷新一次。
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ConsoleOut));
Void ConsoleOut(object ObjState)
{
while(true)
{
textBox1.Text=outSb.ToString;
Thread.Sleep(500)
}
}
3.但是这样,StringWriter会跟随Write的信息不断增加,这样就需要限制StringWriter的大小。但是StringWriter没有属性来控制其它大小,只能通过绑定它的StringBuilder来控制其大小。
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(ConsoleOut));
Void ConsoleOut(object ObjState)
{
while(true)
{
int i=outSb.Length;
if(i>1024000)//当尺寸超过1M时将其清空
{
outSb.Remove(0,i);
}
textBox1.Text=outSb.ToString;
Thread.Sleep(500)
}
}
本文介绍了如何将控制台(Console)的输出实时地显示在Windows应用程序的TextBox中。通过设置Console的输出到StringWriter,并结合StringBuilder和线程,实现TextBox即时更新Console的Write信息。同时,为了防止内存占用过大,添加了对StringBuilder长度的限制。

被折叠的 条评论
为什么被折叠?



