什么是从多个线程显示日志的最佳方式?

时间:2015-02-02 06:14:55

标签: c# multithreading winforms datagridview

我有一个带有datagridview的windows表单应用程序,每行都与它自己的线程相关联。每个线程调用一个对象的不同方法,然后记录入口,退出和其他重要事件。

每当用户点击它时,我想显示与datagridview行对应的日志。这样所选行的消息将显示为运行状态日志。

我考虑过使用Action委托和多行文本框,但不确定如何根据特定的datagridview行过滤日志消息。

请建议我实施此方法。任何帮助将不胜感激

编辑:日志将在文本框中的UI上显示,而不是在我已经存在的文件中。另一件事是我希望日志能够不断更新。

Edit2:我已经将日志附加到行/线程的字符串成员中,当单击该行时,它将显示到目前为止保存的日志消息。但是在线程中,字符串会不断更新新消息。所以我正在寻找一种方法来显示在backgroud线程中更新的运行日志消息。

2 个答案:

答案 0 :(得分:0)

如果许多线程使用相同的对象,最好将其锁定,以便当时只有一个威胁会改变它。

static object obj = new object();
            static void WriteInGrid(string message)
            { 
                lock(obj)
                {
                     Yourdelegate (message)
                }
            }

答案 1 :(得分:0)

要处理日志记录,最好的方法是重用现有的库,例如 log4net 。它们处理好多线程,安全性以及您目前无法想到的所有其他陷阱。

Log4net appenders 一起使用,它们是将日志记录附加到一个或多个目标(文件,数据库或任何您想要的)的方法。

在您的情况下,您想要登录到我认为不可用的UI组件开箱即用。但你可以自己写!我认为为了实现这一点,您只需要创建一个新类来处理UI日志逻辑并相应地编辑log4net配置。

This thread可能是一个良好的开端!它不包括网格中的日志记录,但是在文本框中。基本上它的UI记录!你必须加强它!