从我的logger类到From1中的richTextBox的文本
本文关键字:richTextBox 文本 中的 From1 我的 logger 类到 | 更新日期: 2023-09-27 18:29:31
这只是一个测试,看看我的游戏管理器程序是如何工作的,这就是为什么我希望文本在我的richTextBox中。
我想把日志中的所有新行打印到我的richTextBox中,但我还没有找到一个好的方法。
我现在的做法是每1秒打印一次日志中的最后一个日志条目,所以我错过了很多日志行。
如何打印日志中的所有行,而不仅仅是最后一个日志条目。
Form1
计时器设置为1秒。
private void timerRun_Tick(object sender, EventArgs e)
{
richTextBox1.Text += Environment.NewLine + MyLogger.GetLastLog();
}
MyLogger
public static class MyLogger
{
private static List<string> log = new List<string>();
public static event EventHandler LogAdded;
public static void Log(string message)
{
log.Add(message);
if (LogAdded != null)
LogAdded(null, EventArgs.Empty);
}
public static string GetLastLog()
{
if (log.Count > 0)
return log[log.Count - 1];
else
return null;
}
}
有人有这样的想法或例子吗?
使用此订阅MyLogger
类中定义的LogAdded
事件
MyLogger.LogAdded += (s, e) =>
{
this.Invoke((MethodInvoker) (() =>
{
richTextBox1.Text += Environment.NewLine + MyLogger.GetLastLog();
}));
};
提高效果的几点建议
尝试在
MyLogger
类中自定义事件处理程序,使其反映新添加的日志。因此,您可以直接从事件参数中获取新添加的日志。此更改后,无需调用GetLastLog()
将
LogAdded += (s, e) => {}
添加到MyLogger
类的静态构造函数中。在该改变之后,不需要检查CCD_ 7事件的可为空性。您可以从不同的线程访问CCD_ 8。
MyLogger
不是线程安全的,请设置同步机制(例如使用Lock
)或使用在System.Collection.Concurrent中定义的数据结构(这些都是线程安全的)