110,571
社区成员
发帖
与我相关
我的任务
分享
private void MultiCall(params object[] ptrs)
{
if (this.Writers.Count == 0)
return;
var st = new StackTrace();
var s = st.GetFrame(1);
var m = s.GetMethod();
var methodName = m.Name;
var twInfo = typeof(TextWriter);
if (ptrs == null || ptrs.Length == 0)
m = twInfo.GetMethod(methodName, new Type[] { });
else
{
Type[] types = new Type[ptrs.Length];
for (var i = 0; i < ptrs.Length; i++)
{
types[i] = ptrs[i].GetType();
}
m = twInfo.GetMethod(methodName, types);
}
foreach (var w in this.Writers)
{
m.Invoke(w, ptrs);
}
}
#region override TextWriter
public override void Write(char[] buffer)
{
base.Write(buffer);
MultiCall(buffer);
}
public override void Write(char value)
{
base.Write(value);
MultiCall(value);
}
public override void Write(string value)
{
base.Write(value);
MultiCall(value);
}
public override void Write(char[] buffer, int index, int count)
{
base.Write(buffer, index, count);
MultiCall(buffer, index, count);
}
#endregion
using (log = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "log.txt", false))
{
var con = Console.OpenStandardOutput();
var smw = new StreamMultiWriter(con,Console.OutputEncoding);
smw.AutoFlush = true;
smw.Writers.Add(log);
Console.SetOut(smw);
Console.WriteLine("Console日志同步输入测试");
Console.WriteLine("当前时间:{0}", DateTime.Now);
Console.WriteLine();
smw.Writers.Remove(log);
}