Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Debug.Writeline和/或Console.Writeline到RichTextBox_Vb.net_Console_Richtextbox - Fatal编程技术网

Vb.net Debug.Writeline和/或Console.Writeline到RichTextBox

Vb.net Debug.Writeline和/或Console.Writeline到RichTextBox,vb.net,console,richtextbox,Vb.net,Console,Richtextbox,是否可以将Debug.Writeline和/或Console.Writeline流式传输到中的RichTextBox控件 如果是这样,最好的方法是什么?您可以创建自己的TextWriter,并将控制台的输出设置为该值,这意味着您可以拦截任何写入操作。为了使其更加通用,您可以传入一个委托,以便将来支持任何操作,而不仅仅是更新RichTextBox 例如: class InterceptingWriter : TextWriter { TextWriter _existingWriter;

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


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

您可以创建自己的
TextWriter
,并将
控制台的输出设置为该值,这意味着您可以拦截任何写入操作。为了使其更加通用,您可以传入一个委托,以便将来支持任何操作,而不仅仅是更新
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.WriteLine
,字符串都将输出到控制台,您的
UpdateMyTextBox
方法也将使用相同的字符串调用,从而允许您相应地更新UI

对于
Debug
输出,您可以编写一个侦听器来执行此操作:


您可以创建自己的
文本编写器
,并将
控制台
输出设置为该值,这意味着您可以拦截任何写入操作。为了使其更加通用,您可以传入一个委托,以便将来支持任何操作,而不仅仅是更新
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.WriteLine
,字符串都将输出到控制台,您的
UpdateMyTextBox
方法也将使用相同的字符串调用,从而允许您相应地更新UI

对于
Debug
输出,您可以编写一个侦听器来执行此操作:


控制台/调试调用是在与RichTextBox相同的应用程序中进行的,还是您正在尝试加载控制台应用程序并希望在RTB中显示其输出?那么此链接可能有助于您将console.stdout重定向到另一个流,然后您可以通过管道将其传输到RTB:也许我理解有问题,但是我怎样才能让richtextbox在任何时候更新流中添加的更多内容。控制台/调试调用是否与richtextbox在同一个应用程序中进行,或者您正在尝试加载控制台应用程序并希望在RTB中显示其输出?那么此链接可能会帮助您将console.stdout重定向到另一个流,然后您可以通过管道将其传输到RTB中:也许我理解有困难,但是我怎样才能让richtextbox在流中添加更多内容时随时更新呢?对不起,C#代码。我没有注意到问题被标记为VB.NET。您可以使用在线转换器为您翻译:我已经尝试将其翻译为vb.net,但无法修复。你怎么能这么说?对不起,C代码。我没有注意到问题被标记为VB.NET。您可以使用在线转换器为您翻译:我已经尝试将其翻译为vb.net,但无法修复。你怎么能叫它?