我有一个带有datagridview的windows表单应用程序,每行都与它自己的线程相关联。每个线程调用一个对象的不同方法,然后记录入口,退出和其他重要事件。
每当用户点击它时,我想显示与datagridview行对应的日志。这样所选行的消息将显示为运行状态日志。
我考虑过使用Action委托和多行文本框,但不确定如何根据特定的datagridview行过滤日志消息。
请建议我实施此方法。任何帮助将不胜感激
编辑:日志将在文本框中的UI上显示,而不是在我已经存在的文件中。另一件事是我希望日志能够不断更新。
Edit2:我已经将日志附加到行/线程的字符串成员中,当单击该行时,它将显示到目前为止保存的日志消息。但是在线程中,字符串会不断更新新消息。所以我正在寻找一种方法来显示在backgroud线程中更新的运行日志消息。
答案 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记录!你必须加强它!