非常簡單的問題。我有一個c#.dll有很多Console.Writeline代碼,並希望能夠使用這個.dll在窗體應用程序中查看輸出。是否有一種將控制檯輸出綁定到RichEdit(或其他合適的控件)的相對簡單的方法?或者,我可以在表單中嵌入實際的控制檯外殼嗎?我發現了一些類似的問題,但在大多數情況下,人們希望能夠接收控制檯輸入,這對我來說不是必需的。將控制檯輸出綁定到RichEdit
謝謝。
非常簡單的問題。我有一個c#.dll有很多Console.Writeline代碼,並希望能夠使用這個.dll在窗體應用程序中查看輸出。是否有一種將控制檯輸出綁定到RichEdit(或其他合適的控件)的相對簡單的方法?或者,我可以在表單中嵌入實際的控制檯外殼嗎?我發現了一些類似的問題,但在大多數情況下,人們希望能夠接收控制檯輸入,這對我來說不是必需的。將控制檯輸出綁定到RichEdit
謝謝。
您可以使用Console.SetOut()重定向輸出。以下是一個演示此方法的示例表單。在窗體上放置一個RichTextBox和一個按鈕。
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
button1.Click += button1_Click;
Console.SetOut(new MyLogger(richTextBox1));
}
class MyLogger : System.IO.TextWriter {
private RichTextBox rtb;
public MyLogger(RichTextBox rtb) { this.rtb = rtb; }
public override Encoding Encoding { get { return null; } }
public override void Write(char value) {
if (value != '\r') rtb.AppendText(new string(value, 1));
}
}
private void button1_Click(object sender, EventArgs e) {
Console.WriteLine(DateTime.Now);
}
}
我認爲它不會很快,但看起來沒問題,當我嘗試它。你可以通過重寫更多的方法來進行優化。
IMO,倒不如重構現有的代碼替換現有Console.WriteLine
一些中央方法在你的代碼,然後再重新指向這個方法,可能提供另一個TextWriter
:
private static TextWriter output = Console.Out;
public static TextWriter Output {
get {return output;}
set {output = value ?? Console.Out;}
}
public static void WriteLine(string value) {
output.WriteLine(value);
}
public static void WriteLine(string format, params string[] args) {
output.WriteLine(format, args);
}
或者(更簡單,而且更簡單一點就是靜態字段),只需將TextWriter
傳入現有代碼並寫入該代碼即可?
感謝您的迴應,似乎工作得很好。而且我並不需要特別有效的方法。 – DeusAduro 2010-09-20 16:57:24
感謝@Hans Passant,我已將您的解決方案添加到此處的初學者問題中:http://stackoverflow.com/questions/22028888/visual-studio-2013-how-do-i-view-output-in-the-console/36645367#36645367 – Goodies 2016-04-15 11:07:47