【问题标题】:Debug.Writeline and/or Console.Writeline to RichTextBoxDebug.Writeline 和/或 Console.Writeline 到 RichTextBox
【发布时间】:2012-12-24 00:42:53
【问题描述】:

是否可以将Debug.Writeline 和/或Console.Writeline 流式传输到VB.NET 中的RichTextBox 控件?

如果是这样,最好的方法是什么?

【问题讨论】:

  • 是在与 RichTextBox 相同的应用程序中进行的控制台/调试调用,还是您尝试加载控制台应用程序并希望在 RTB 中显示其输出?
  • 那么此链接可能会帮助您将 console.stdout 重定向到另一个流,然后您可以将其通过管道传输到您的 RTB:msdn.microsoft.com/en-us/library/system.console.setout.aspx
  • 也许我在理解上有困难,但是当更多内容被添加到流中时,我将如何让richtextbox 进行更新。

标签: vb.net console richtextbox


【解决方案1】:

您可以创建自己的TextWriter 并将Console 输出设置为此,这意味着您可以拦截任何写入。为了使其更通用,您可以传入一个委托,以便将来支持任何操作,而不仅仅是更新您的 RichTextBox

例如:

class InterceptingWriter : TextWriter
{
    TextWriter _existingWriter;
    Action<string> _writeTask;

    public InterceptingWriter(TextWriter existing, Action<string> task)
    {
        _existingWriter = existing;
        _writeTask = task;
    }

    public override void WriteLine(string value)
    {
        // This outputs to the console. Remove it if you only want output to
        // appear in your control
        _existingWriter.WriteLine(value);
        // This calls the delegate you passed in to the constructor, updating 
        // your textbox or anything else that acts upon the string passed in
        _writeTask(value);
    }

    public override Encoding Encoding
    {
        get { throw new NotImplementedException(); }
    }

    // ...other overrides as necessary...
}

在被调用者中:

Console.SetOut(new InterceptingWriter(Console.Out, (str) => UpdateMyTextBox(str));

现在,无论何时您调用 Console.WriteLine,该字符串都会输出到控制台,并且您的 UpdateMyTextBox 方法也将使用相同的字符串调用,从而让您相应地更新 UI。

至于Debug的输出,你可以写一个监听器来做到这一点:

http://msdn.microsoft.com/en-us/library/4y5y10s7.aspx

【讨论】:

  • 对不起 C# 代码。我错过了这个问题被标记为 VB.NET。您可以使用在线转换器为您翻译:developerfusion.com/tools/convert/csharp-to-vb
  • 我已尝试将其翻译到 vb.net,但无法修复。你怎么称呼它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2020-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多