public void Stop() { try { if (!_started) { return; } if (_surface?.Devices != null) { for (var i = _surface.Devices.Count - 1; i >= 0; i--) { try { var device = _surface.Devices[i]; _surface.Detach(device); device.Dispose(); } catch (Exception ex) { _ = Task.Run(() => _logger?.WriteLog(ex?.ToString())); } } } CorsairDeviceProvider.Instance.Dispose(); CorsairDeviceProvider.Instance.Exception -= Instance_Exception; RazerDeviceProvider.Instance.Dispose(); RazerDeviceProvider.Instance.Exception -= Instance_Exception; LogitechDeviceProvider.Instance.Dispose(); LogitechDeviceProvider.Instance.Exception -= Instance_Exception; AsusDeviceProvider.Instance.Dispose(); AsusDeviceProvider.Instance.Exception -= Instance_Exception; _surface.Exception -= Surface_Exception; _surface.Dispose(); _surface = null; _started = false; } catch (Exception ex) { _ = Task.Run(() => _logger?.WriteLog(ex?.ToString())); } }