dotnet核心中winforms中的consoleloggerprovider

时间:2020-09-18 08:22:06

标签: c# winforms logging .net-core

我正在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);
                    }
                }
            });
        }

0 个答案:

没有答案