Prendo spunto da un thread apparso oggi sul forum MSDN dedicato a Visual Basic, in cui si richiedeva come sia possibile interrogare il registro degli eventi di log di Windows, filtrando il risultato in base all'ID evento specificato.
Innanzitutto si ottiene un riferimento al registro degli eventi di Windows con un'istanza della classe System.Diagnostics.EventLog, al cui costruttore si passa, come argomento, il nome del log da interrogare (come Application, Security, Setup ecc.). Una volta ottenuta l'istanza, si scrive una query LINQ che selezioni solo gli entry (rappresentati da oggetti EventLogEntry) contraddistinti dall'ID desiderato. Il seguente codice esegue tutte queste operazioni:
Dim eLog As New EventLog("Application")
Dim specificEntries = From logEntry In eLog.Entries.Cast(Of EventLogEntry)()
Where logEntry.InstanceId = 9010
Select logEntry
Notate l'utilizzo dell'operatore Cast(Of T), che spesso è necessario in scenari LINQ to Objects, laddove il compilatore non sia in grado di inferire il tipo corretto. La proprietà EventLogEntry.InstanceId ci consente di confrontare l'ID evento desiderato (sulla mia macchina l'ID 9010 riguarda gli eventi generati da TFS 2010 Beta 2). Possiamo poi elaborare l'insieme così ottenuto (per esempio con un For..Each) per ottenere informazioni sull'evento, ad esempio l'applicazione che l'ha generato (proprietà EventLogEntry.Source) o il messaggio dell'evento (proprietà EventLogEntry.Message).
Alessandro