c# - 将 console.writeline 从 Windows 应用程序重定向到字符串

标签 c# .net console

我有一个用 C# 编写的外部 dll,我从程序集文档中了解到它使用 Console.WriteLine 将其调试消息写入控制台。

这个 DLL 在我与应用程序的 UI 交互期间写入控制台,所以我不直接进行 DLL 调用,但我会捕获所有控制台输出,所以我想我必须在表单加载中初始化,然后得到它稍后捕获文本。

我想将所有输出重定向到一个字符串变量。

我试过Console.SetOut,但它重定向到字符串的使用并不容易。

最佳答案

因为您似乎想实时捕获控制台输出,所以我发现您可以创建自己的 TextWriter 实现,只要 WriteWriteLine 发生在 Console 上。

作者长这样:

    public class ConsoleWriterEventArgs : EventArgs
    {
        public string Value { get; private set; }
        public ConsoleWriterEventArgs(string value)
        {
            Value = value;
        }
    }

    public class ConsoleWriter : TextWriter
    {
        public override Encoding Encoding { get { return Encoding.UTF8; } }

        public override void Write(string value)
        {
            if (WriteEvent != null) WriteEvent(this, new ConsoleWriterEventArgs(value));
            base.Write(value);
        }

        public override void WriteLine(string value)
        {
            if (WriteLineEvent != null) WriteLineEvent(this, new ConsoleWriterEventArgs(value));
            base.WriteLine(value);
        }

        public event EventHandler<ConsoleWriterEventArgs> WriteEvent;
        public event EventHandler<ConsoleWriterEventArgs> WriteLineEvent;
    }

如果它是一个 WinForm 应用程序,您可以像这样在 Program.cs 中设置编写器并使用它的事件:

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        using (var consoleWriter = new ConsoleWriter())
        {
            consoleWriter.WriteEvent += consoleWriter_WriteEvent;
            consoleWriter.WriteLineEvent += consoleWriter_WriteLineEvent;

            Console.SetOut(consoleWriter);
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }

    static void consoleWriter_WriteLineEvent(object sender, Program.ConsoleWriterEventArgs e)
    {
        MessageBox.Show(e.Value, "WriteLine");
    }

    static void consoleWriter_WriteEvent(object sender, Program.ConsoleWriterEventArgs e)
    {
        MessageBox.Show(e.Value, "Write");
    }

关于c# - 将 console.writeline 从 Windows 应用程序重定向到字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911660/

相关文章:

linux - 如何在 Debian linux 控制台上显示中文或日文?

c# - 泛型方法声明

c# - c# 中货币值(value)的 RegEx 验证

.net - 查找性能 : Array, 列表还是字典?

delphi - 如何从 GUI 应用程序向控制台应用程序发送命令

ruby-on-rails - 在 Heroku 控制台上运行循环或多行代码

c# - 未为目标提供服务证书 '###' 在 ClientCredentials 中指定服务证书

c# - await 运算符只能在异步方法中使用 - 但方法是异步的

c# - 在 Excel 2003 中使用 WCF?

c# - 日期时间计算的奇怪问题