在winforms中,最简单的方法是创建一个显示控制台输出的窗口?

Isa*_*ger 6 .net winforms

我有一些屏幕进行一些可能需要很长时间的数据查询.我的数据库层已经将查询字符串放到控制台(我可以在调试时在输出窗口中看到它们).我只想拥有一个窗口,用户可以打开以查看同样的事情,如果他们变得不耐烦.

有关快速方法的任何建议吗?

adr*_*nks 5

如果将重定向Console.Out到a的实例StringWriter,则可以获取已写入控制台的文本:

StringWriter writer = new StringWriter();
Console.SetOut(writer);
StringBuilder consoleOut = writer.GetStringBuilder();
string text = consoleOut.ToString();
Run Code Online (Sandbox Code Playgroud)

如果你在一个新的内部执行此操作Form,则可以按间隔轮询以获取到目前为止已写入控制台的文本并将其值放入a TextBox.一个粗略的例子:

public MyForm()
{
    InitializeComponent();

    StringWriter writer = new StringWriter();
    Console.SetOut(writer);

    Timer timer = new Timer();
    timer.Tick += (o, s) => textBox.Text = writer.GetStringBuilder().ToString();
    timer.Interval = 500;
    timer.Start();
}
Run Code Online (Sandbox Code Playgroud)

有几点需要注意:

  • StringWriter是一次性的,所以从技术上讲,你需要在完成后处理它(虽然实际上它的Dispose()方法什么都不做,所以不是一个大问题).
  • StringWriter保持一个内部StringBuilder包含到目前为止写入它的所有文本.这将随着时间的推移变得越来越大,因此应用程序运行的时间越长,它将消耗的内存越多.当它达到一定大小时,您可以定期检查以清除它.
  • 如果您将间隔设置得太小,您将不断使用CPU.
  • 确保Console.Out在关闭表单时重新设置其原始值,否则您将无法再次向控制台打印消息.