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();
            }
        }