I have built a library that dumps most of its debug text using Console.WriteLine();
I am now I am the process of using the library in a Windows Forms Application, and still need access to the Console output. ( To Display in a List/RichText box )
I Noticed I can override the standard out of the console to a TextWriter, but how would I then get this data into the display .
I Tried doing something along the lines of
public partial class Form1 : Form
{
Timer T;
MemoryStream mem;
StreamWriter writer;
public Form1()
{
InitializeComponent();
mem = new MemoryStream(1000);
writer = new StreamWriter(mem);
Console.SetOut(writer);
T = new Timer();
T.Interval = 250; // yes this probally is to short.
T.Tick += new EventHandler(T_Tick);
T.Start();
Console.WriteLine("output");
Console.WriteLine("AnotherLine");
}
void T_Tick(object sender, EventArgs e)
{
string s = Encoding.Default.GetString(mem.ToArray());
string[] Lines = s.Split(Environment.NewLine.ToCharArray());
Output.Items.Clear(); // Output is a listbox
foreach (string str in Lines)
Output.Items.Add(str);
}
}
but to no avail. Any ideas?
Unneeded code removed.
Another, probably cleaner way to do this is to extend TextWriter with your own that logs to wherever you'd like it to.
Note: I have not tested this.
public class ListBoxWriter : TextWriter
{
private ListBox list;
private StringBuilder content = new StringBuilder();
public ListBoxWriter(ListBox list)
{
this.list = list;
}
public override void Write(char value)
{
base.Write(value);
content.Append(value);
if (value == '\n')
{
list.Items.Add(content.ToString());
content = new StringBuilder();
}
}
public override Encoding Encoding
{
get { return System.Text.Encoding.UTF8; }
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With