我正在dotnet核心中编写一个TCP通信管理解决方案。 该库使用Microsoft.Extensions.Logging包进行日志记录 现在,我想将Winforms应用程序作为实用工具包添加到解决方案中。
在winforms控件中接收日志输出的最佳方法是什么。目前,我正在尝试通过从Console.OpenStandardOutput()中读取流来使用ConsoleLoggerProvider。
使用当前的方法,我在预期的日志输出中缺少一些行。
private static void MainForm_Load(object sender, EventArgs e)
{
var mainForm = sender as Form1;
var uiContext = SynchronizationContext.Current;
var s = new MemoryStream();
var w = new StreamWriter(s, Encoding.UTF7) { AutoFlush = true };
var reader = new StreamReader(s, Encoding.UTF7);
Console.SetIn(reader);
Console.SetOut(w);
Task.Run(() =>
{
while (true)
{
var newLine = reader.ReadLine();
if (newLine != null)
{
uiContext.Send(_ => { mainForm.WriteConsoleLine(newLine); }, null);
}
}
});
}