那天需要把Console的输出在TextBox中显示, 本来以为要大干一番的是候突然想起了NUnit, 不看代码不知道一看代码吓一跳, 也太容易了-_-. 原来Console有个SetOut方法, 极度火星-_-. 这里的给出的示例代码并不好,因为很多时候你得进行Buffer和Lock
.
示例代码如下:
using System;
using System.IO;
using System.Windows.Forms;
using System.Text;
public class TextBoxWriter : TextWriter // 继承自TextWriter
{
private TextBoxBase textBox;
public TextBoxWriter(TextBox textBox)
{
this.textBox = textBox;
}
public override void Write(char c)
{
Write( c.ToString() );
}
public override void Write(String s)
{
AppendText( s );
}
private void AppendText( string s )
{
textBox.AppendText( s );
}
public override Encoding Encoding
{
get { return Encoding.Default; }
}
public override void WriteLine(string s)
{
Write( s + "\r\n" );
}
}
using System;
using Cramon.NetExtension.DynamicProxy;
using System.Reflection;
public class Biz
{
// 这里使用了DynamicProxy.NET来创建动态代理.
private static ILog log = (ILog) DynamicProxyFactory.Instance.CreateProxy(LogFactory.GetInstance(), new InvocationDelegate(InvocationHandler));
private static object InvocationHandler(object target, MethodBase method, object[] parameters)
{
foreach(object obj in parameters)
{
Console.WriteLine( DateTime.Now.ToString("yyyy-MM-dd HH:mm
s") + " " + obj.ToString());
}
object result = method.Invoke(target, parameters);
return result;
}
public void Test()
{
log.foo("I am a Pig");
}
}
private void button1_Click(object sender, System.EventArgs e)
{
TextBoxWriter writer = new TextBoxWriter(this.textBox1);
Console.SetOut(writer);
Biz biz = new Biz();
biz.Test();
}
打印 | 张贴于 2004-03-22 18:10:00 | Tag:Binzy's