我有一个控制台程序,我想不断地镜像 Console.Write 的结果到一个集合中,我可以实时查看它的尾部。集合可以是数组、列表等。
我假设我必须使用某种事件处理程序?
我不介意被指向第 3 方库的方向,例如NLog.
更新
我需要在内存中维护一个集合,它反射(reflect)了当前的控制台状态(然后我可以使用套接字发送到远程 WinForms 应用程序)。撇开细节不谈,我想我可以用几行 C# 代码来做到这一点——我不想添加一个巨大的日志记录库,除非它没有很好的需要。
最佳答案
Console 类允许您替换输出和错误流。正是您在这里需要的,您可以将它们替换为 TextWriter,该 TextWriter 还会记录所写内容。示例实现:
class ConsoleLogger : System.IO.TextWriter {
private System.IO.TextWriter oldOut;
private Queue<string> log = new Queue<string>();
private StringBuilder line = new StringBuilder();
private object locker = new object();
private int newline;
private int logmax;
public ConsoleLogger(int history) {
logmax = history;
oldOut = Console.Out;
Console.SetOut(this);
}
public override Encoding Encoding {
get { return oldOut.Encoding; }
}
public override void Write(char value) {
oldOut.Write(value);
lock (locker) {
if (value == '\r') newline++;
else if (value == '\n') {
log.Enqueue(line.ToString());
if (log.Count > logmax) log.Dequeue();
line.Length = newline = 0;
}
else {
for (; newline > 0; newline--) line.Append('\r');
line.Append(value);
}
}
}
}
用法:
static void Main(string[] args) {
var outLogger = new ConsoleLogger(100);
// etc...
}
关于c# - 有没有办法将 Console.Write 的结果连续镜像到集合(数组、列表等)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5368229/