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

时间:2011-08-04 22:42:44

标签: .net winforms

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

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

2 个答案:

答案 0 :(得分:5)

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

StringWriter writer = new StringWriter();
Console.SetOut(writer);
StringBuilder consoleOut = writer.GetStringBuilder();
string text = consoleOut.ToString();

如果您在新的Form中执行此操作,则可以按间隔轮询以获取到目前为止已写入控制台的文本并将其值放入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();
}

要注意的一些事项:

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

答案 1 :(得分:0)

DebugView

  

DebugView是一个应用程序,它允许您监视本地系统或网络上可通过TCP / IP访问的任何计算机上的调试输出。它能够显示内核模式和Win32调试输出,因此您不需要调试器来捕获应用程序或设备驱动程序生成的调试输出,也不需要修改应用程序或驱动程序以使用非标准调试输出API。