C# 如何仅读取添加到事件日志中的新事件?
我正在做一个项目来读取和显示windows事件日志。我使用以下代码从事件日志中读取事件并显示它们C# 如何仅读取添加到事件日志中的新事件?,c#,windows,winapi,event-log,C#,Windows,Winapi,Event Log,我正在做一个项目来读取和显示windows事件日志。我使用以下代码从事件日志中读取事件并显示它们 public static void Main(string[] args) { EventLog[] ev; ev = EventLog.GetEventLogs(); Console.WriteLine("Number of logs on computer: " + ev.Length); foreach (EventLog log in ev)
public static void Main(string[] args)
{
EventLog[] ev;
ev = EventLog.GetEventLogs();
Console.WriteLine("Number of logs on computer: " + ev.Length);
foreach (EventLog log in ev)
{
Console.WriteLine("Log: " + log.Log);
foreach (EventLogEntry entry in log.Entries)
{
Console.WriteLine("Entry: " + entry.Message);
Console.WriteLine("Source: " + entry.Source);
Console.WriteLine("Category: " + entry.Category);
Console.WriteLine("EventID: " + entry.Source);
}
}
}
这段代码运行良好。它显示已存储在日志文件中的所有事件。但我想在这之后实现的是,我必须阅读即将发生的事件,并每隔10秒更新一次
如果我继续并再次调用相同的函数,我将获得所有事件,但我只需要新添加的事件。我如何做到这一点
TL DR:我只想听事件日志中新添加的事件,而不是整个事件日志
EventLog appLogs = new EventLog("Application");
var entries = appLogs.Entries.Cast<EventLogEntry>()
.Where(x => x.TimeWritten >= DateTime.Now.AddMinutes(-60))
.ToList();
这可能比尝试轮询EventLog管道更轻松。通过MSDN,我自己找到了解决方案。这是为将来可能来这里的人准备的,这是解决办法
虽然前面的答案是正确的,但我只是想添加,您可以添加一个事件处理程序,用于除管理日志之外的日志。感谢@TheGeneral提供的解决方案,如果有一个像事件收集器这样的东西可以直接收集事件,而不是从事件日志中读取事件,那就太好了!
EventLog myNewLog = new EventLog("Application", ".", "testEventLogEvent");
myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
myNewLog.EnableRaisingEvents = true;