2010-09-19 82 views
3

非常簡單的問題。我有一個c#.dll有很多Console.Writeline代碼,並希望能夠使用這個.dll在窗體應用程序中查看輸出。是否有一種將控制檯輸出綁定到RichEdit(或其他合適的控件)的相對簡單的方法?或者,我可以在表單中嵌入實際的控制檯外殼嗎?我發現了一些類似的問題,但在大多數情況下,人們希望能夠接收控制檯輸入,這對我來說不是必需的。將控制檯輸出綁定到RichEdit

謝謝。

回答

4

您可以使用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); 
    } 
} 

我認爲它不會很快,但看起來沒問題,當我嘗試它。你可以通過重寫更多的方法來進行優化。

+0

感謝您的迴應,似乎工作得很好。而且我並不需要特別有效的方法。 – DeusAduro 2010-09-20 16:57:24

+0

感謝@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

3

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傳入現有代碼並寫入該代碼即可?