在richtextbox中显示stdout和stderr

时间:2012-02-24 16:30:43

标签: c# visual-studio-2010

如果我有这样的GUI:

---------------------

[Button]

---------------------
[RichTextbox_output]

---------------------

是否可以显示所有内容:

我可以从visual studio的'output'diaglog中看到的richTextbox中的stdout和stderr?

提前致谢。

2 个答案:

答案 0 :(得分:5)

C#中的Stdout称为Console.Out。 Stderr被称为Console.Error

要解决此问题,您需要重定向Console.Out。这可以使用Console.SetOut完成。然后,需要将其重定向到您自己的自定义字符写入器,该字符写入器将写入富文本框。这不是内置在文本框中,您需要创建自己的流实现。一种可能的解决方案是子类化StringWriter并重载WriteLine方法以改为推送到文本框。

public class TextBoxWriter : StringWriter
{
   public override void WriteLine(string x)
   {
       // Write to textbox here
   }
}

显然,如果你使用的不仅仅是WriteLine,你还必须为这些方法创建重载。

对于stderr流,可以使用Console.SetError采用相同的方法。

答案 1 :(得分:0)

对于stderr,您必须将程序封装在try / catch块中。在哪里捕获所有错误。对于stdout,有两个选项,覆盖stdout以写入文本框或只是写入textBox到处而不是写入stdout。

例外情况:

try {
   // your program
catch (Exception e){
   RichTextbox_output.AppendText()
}

此示例要求RichTextbox在范围内,因此在程序中放置可能会很棘手。

对于使用stdout的每个地方,使用RichTextbox_output.AppendText()

代替Console.write