private void Events_OnEvent(object sender, TestEventData e) { MethodInvoker methodInvokerDelegate = delegate() { textBox1.AppendText(e.ToString() + "\n"); }; Invoke(methodInvokerDelegate); }
private void SetupSession() { session = new TraceEventSession("DelphiTestProvider"); // ETW buffers events and only delivers them after buffering up for some amount of time. Thus // there is a small delay of about 2-4 seconds between the timestamp on the event (which is very // accurate), and the time we actually get the event. session.Source.Dynamic.All += delegate(TraceEvent data) { Interlocked.Increment(ref EventCounter); var str = data.ToString(); Debug.WriteLine(string.Format("GOT Event {0} ", str)); OnEventAny?.Invoke(this, data.ToString()); }; session.Source.Dynamic.AddCallbackForProviderEvent("Delphi-Test-Provider", "Test/Random", delegate(TraceEvent data) { var index = Interlocked.Increment(ref EventCounter); try { var obj = new TestEventData(index, data); Debug.WriteLine(obj); OnEvent?.Invoke(this, obj); } catch (Exception ex) { Debug.WriteLine("Exception while parsing event: " + ex); } }); session.Source.UnhandledEvents += delegate(TraceEvent data) { if ((int)data.ID != 0xFFFE) // The EventSource manifest events show up as unhanded, filter them out. { Debug.WriteLine("GOT UNHANDLED EVENT: " + data.Dump()); } }; var traceOptions = new TraceEventProviderOptions { StacksEnabled = false }; session.EnableProvider("Delphi-Test-Provider", options: traceOptions); // go into a loop processing events can calling the callbacks. Because this is live data (not from a file) // processing never completes by itself, but only because someone called 'source.Dispose()'. Task.Run(() => { session.Source.Process(); }); }