private static void PrintStartStop(EventLog systemLog) { EventLogEntryCollection entries = systemLog.Entries; EventLogEntry[] entriesArray = new EventLogEntry[entries.Count]; entries.CopyTo(entriesArray, 0); DateTime startTime = entriesArray.First().TimeGenerated; bool started = true; bool sleeping = false; foreach (EventLogEntry entry in entriesArray) { switch (GetEventType(entry)) { case EventType.StartingUp: if (started) { Program.PrintDate(startTime, entry.TimeGenerated, "unexpected restart"); } startTime = entry.TimeGenerated; started = true; break; case EventType.ShuttingDown: Program.PrintDate(startTime, entry.TimeGenerated, "shutting down"); started = false; break; case EventType.EnteringSleep: sleeping = true; Program.PrintDate(startTime, entry.TimeGenerated, "going to sleep"); started = false; break; case EventType.ResumingFromSleep: sleeping = false; startTime = entry.TimeGenerated; started = true; break; case EventType.SystemTimeChanged: if (sleeping) { sleeping = false; startTime = entry.TimeGenerated; } break; } } Program.PrintDate(startTime, DateTime.Now, "still running"); }