Próbuję użyć Event Tracing for Windows (ETW) w mojej aplikacji .NET za pośrednictwem klasy EventSource, która została uwzględniona w .NET 4.5. Ja instacji EventSource
jak MyEventSource
i próbuje implementować interfejs IMyEventSource
(dla celów drwiących) w następujący sposób:Dlaczego implementacja interfejsu na podklasę EventSource rzuca wyjątek w czasie wykonywania?
public interface IMyEventSource
{
void Test();
}
public class MyEventSource : EventSource, IMyEventSource
{
public static MyEventSource Log = new MyEventSource();
[Event(1)]
public void Test()
{
this.WriteEvent(1);
}
}
Kiedy biegnę PerfView i wykonanie tego kodu, otrzymuję IndexOutOfRangeException
na wezwanie do WriteEvent
. Jeśli usunę interfejs, modyfikując kod ...
public class MyEventSource : EventSource
{
public static MyEventSource Log = new MyEventSource();
[Event(1)]
public void Test()
{
this.WriteEvent(1);
}
}
... wtedy wszystko działa dobrze.
Oto kod użyłem do testów w obu przypadkach:
static void Main(string[] args)
{
MyEventSource.Log.Test();
}
Dlaczego mój podklasa EventSource
przerwy czy po prostu implementuje interfejs?
Oto related post.
Należy zauważyć, że dotyczy to tylko wersji NuSet zdarzenia EventsSource (tj. ** Microsoft **. Diagnostics.Tracing.EventSource). Wbudowana wersja dostarczana z .NET 4.5 (tj. ** System **. Diagnostics.Tracing.EventSource) nadal ma to ograniczenie. –
Mówię o wersji NuGet (Microsoft), a nie wersji System. – magicandre1981
Tak, wiem, ale to może nie być oczywiste dla nikogo czytającego tę odpowiedź. –