Sto cercando di utilizzare Event Tracing for Windows (ETW) nella mia applicazione .NET tramite la classe EventSource inclusa in .NET 4.5. Sto sottoclasse EventSource
come MyEventSource
e cercando di implementare un'interfaccia IMyEventSource
(a scopo di scherno) come segue:Perché l'implementazione di un'interfaccia in una sottoclasse di EventSource genera un'eccezione in fase di runtime?
public interface IMyEventSource
{
void Test();
}
public class MyEventSource : EventSource, IMyEventSource
{
public static MyEventSource Log = new MyEventSource();
[Event(1)]
public void Test()
{
this.WriteEvent(1);
}
}
Quando eseguo PerfView ed eseguire questo codice, ottengo una IndexOutOfRangeException
sulla chiamata a WriteEvent
. Se rimuovo l'interfaccia modificando il codice ...
public class MyEventSource : EventSource
{
public static MyEventSource Log = new MyEventSource();
[Event(1)]
public void Test()
{
this.WriteEvent(1);
}
}
... quindi tutto funziona perfettamente.
Ecco il codice che ho usato per la prova in entrambi i casi:
static void Main(string[] args)
{
MyEventSource.Log.Test();
}
Perché il mio sottoclasse di EventSource
pausa, se si implementa una semplice interfaccia?
Questo è un related post.
È importante notare che questo è vero solo per la versione NuGet di EventsSource (ad esempio ** Microsoft **. Diagnostics.Tracing.EventSource). La versione integrata fornita con .NET 4.5 (cioè ** Sistema **. Diagnostics.Tracing.EventSource) ha ancora questa limitazione. –
Parlo della versione di NuGet (Microsoft), non della versione di sistema. – magicandre1981
Sì, lo so, ma potrebbe non essere evidente a chiunque legga questa risposta. –