So pretty straightforward question. I have a c# .dll with a whole lot of Console.Writeline code and would like to be able to view that output in a forms application using th
You can use Console.SetOut() to redirect the output. Here's a sample form that demonstrates the approach. Drop a RichTextBox and a button on the form.
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);
}
}
I assume it won't be very fast but looked okay when I tried it. You could optimize by overriding more methods.
IMO, it would be better to refactor the existing code, replacing the existing Console.WriteLine
to some central method in your code, and then repoint this method, presumably by supplying another 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);
}
Or (simpler and less hacky re a static field), simply pass a TextWriter
into your existing code and write to that?