我有一个用 C# 编写的外部 dll,我从程序集文档中了解到它使用 Console.WriteLine
将其调试消息写入控制台。
这个 DLL 在我与应用程序的 UI 交互期间写入控制台,所以我不直接进行 DLL 调用,但我会捕获所有控制台输出,所以我想我必须在表单加载中初始化,然后得到它稍后捕获文本。
我想将所有输出重定向到一个字符串变量。
我试过Console.SetOut
,但它重定向到字符串的使用并不容易。
最佳答案
因为您似乎想实时捕获控制台输出,所以我发现您可以创建自己的 TextWriter
实现,只要 Write
或WriteLine
发生在 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/