Fus*_*awn 5 .net c# winforms console-redirect
我已经构建了一个库,使用Console.WriteLine()转储其大部分调试文本;
我现在是在Windows窗体应用程序中使用库的过程,仍然需要访问控制台输出.(要在List/RichText框中显示)
我注意到我可以将控制台的标准覆盖到TextWriter,但是如何将这些数据放入显示器.
我试着做一些事情
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但无济于事.有任何想法吗?
删除了不需要的代码.
Mic*_*tta 12
另一种可能更简洁的方法是使用您自己的日志将TextWriter扩展到您希望的任何位置.
注意:我没有测试过这个.
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; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7158 次 |
| 最近记录: |