平常寫程式總會做一些狀態的輸出,例如現在完成了什麼、某個數值是多少(總不可能永遠都用偵錯模式看嘛),若沒用一些專門處理 log 的 library 大概就是用 Console.write 最簡單了。
當寫好的程式被用在視窗程式裡,要看到這些 console 可以用 kernel32 的 AllocConsole,但我今天就是想要顯示在 form 的 textbox 裡!
這個 Console 其實是可以設定 out 去哪裡的,呼叫 Console.SetOut(TextWriter),然後只要自己寫好一個繼承自 TextWriter 的東西就可以丟給他了,至於要 out 去哪裡就是看 TextWriter 的 Write 和 WriteLine 怎麼寫了。
在此獻上一段簡單的 code
public class ConsoleTextBoxWriter : TextWriter
{
private TextBox textBox;
public ConsoleTextBoxWriter(TextBox textBox)
{
Console.SetOut(this);
this.textBox = textBox;
}
public override Encoding Encoding { get { return Encoding.UTF8; } }
public override void Write(string value)
{
WriteImp(value);
}
public override void WriteLine(string value)
{
WriteImp(value + Environment.NewLine);
}
private void WriteImp(string value)
{
if (this.textBox.InvokeRequired)
this.textBox.Invoke(new MethodInvoker(delegate()
{
textBox.AppendText(value);
}));
else
textBox.AppendText(value);
}
}
Written with StackEdit.
沒有留言:
張貼留言