private bool disposedValue = false; // To detect redundant calls private void Dispose(bool disposing) { if (!disposedValue && !_properties.IsClosed) { disposedValue = true; if (_providers.Count > 0) { foreach (var prov in _providers) { Guid provider_id = prov.ProviderId; Win32NativeMethods.EnableTraceEx2(_handle, ref provider_id, EventControlCode.DisableProvider, prov.Level, 0, 0, 0, null); } } Win32NativeMethods.ControlTrace(_handle, null, _properties, EventTraceControl.Stop); _properties?.Dispose(); } }