c# - 控制台输出流的自定义文本编写器在外部类中不起作用
问题描述
我正在尝试将Console
输出转发到 Windows 窗体TextBox
控件。所以我附加了一个自定义TextWriter
,Console
它将输出附加到TextBox
.
但我认为TextWriter
orTextBox
在外部类中是不可访问的。如何解决这个问题?在下面检查我的代码:
partial class Form1 : Form
{
public StringWriter _TextWriter;
public Form1()
{
InitializeComponent();
this._TextWriter = new TextBoxStreamWriter(this.textBox1);
Console.SetOut(this._TextWriter);
Console.WriteLine("This text does appear in the TextBox, works perfect.");
Test ConsoleOutputExternalClass = new Test();
}
}
public class TextBoxStreamWriter : StringWriter
{
TextBox _output = null;
public TextBoxStreamWriter(TextBox output)
{
this._output = output;
}
public override void WriteLine(string value)
{
base.WriteLine(value);
this._output.AppendText(value.ToString());
}
public override Encoding Encoding
{
get
{
return Encoding.UTF8;
}
}
}
private class Test
{
public Test()
{
// HERE I GET AN EXCEPTION ERROR !!
Console.WriteLine("System.IO.IOException: 'The handle is invalid.'");
}
}
解决方案
正如我在实验后发现的那样,这个问题的原因超出了我的预期。在我的程序中,我曾经Console.Clear()
删除所有打印的行,但显然这也会破坏到自定义设置输出流的链接。
毕竟这不会清除 TextBox,我应该使用TextBox.Clear()
.
对此我很抱歉,因为在这种情况下我的问题不是重点,问题似乎出在其他地方。事实上,我问题中的代码确实可以完美运行,因为没有调用Console.Clear()
,但我只是还没有找出真正导致问题的原因。
真正的问题是:如何“覆盖”Console.Clear()
以清除 TextBox?但这是另一个话题。
推荐阅读
- java - 在java中从同一个文件中读取两个矩阵
- python - 使用和不使用 GPU 进行编程的语法差异?
- python - 读取 excel 文件得到 TypeError:int() 参数必须是字符串,而不是 Pandas 中的 '_NoValueType'
- ruby - 希望将文件中的信息转换为哈希 Ruby
- python - python pickle,在重新加载时不存储列表元素
- join - 在 Flink 中加入历史数据时,一个源比另一端慢得多
- r - 在 r 中对字符向量使用 &&
- javascript - 在asp.net MVC中通过ajax请求下载文件
- git - Git LFS 会减少你的 repo 的大小吗?
- uiview - 获取 UI 上显示的 UIView 实例数