在richtextbox中显示stdout和stderr

本文关键字:stderr stdout 显示 richtextbox | 更新日期: 2023-09-27 18:25:47

如果我有这样的GUI:

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

是否可以显示全部:

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

提前谢谢。

在richtextbox中显示stdout和stderr

C#中的标准输出称为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也可以采用相同的方法。

对于stderr,您必须将程序封装在try/catch块中。在哪里可以发现所有错误。对于stdout,有两个选项,覆盖stdout以写入textbox,或者只需在任何地方写入textbox,而不是写入stdout。

例外情况:

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

这个例子要求RichTextbox在作用域内,所以在程序中的位置可能很棘手。

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