diff --git a/RGB.NET.Core/RGBSurface.cs b/RGB.NET.Core/RGBSurface.cs index c7b664c..71ca90d 100644 --- a/RGB.NET.Core/RGBSurface.cs +++ b/RGB.NET.Core/RGBSurface.cs @@ -102,6 +102,9 @@ namespace RGB.NET.Core /// public void Dispose() { + if (_updateTokenSource?.IsCancellationRequested == false) + _updateTokenSource.Cancel(); + foreach (IRGBDevice device in _devices) try { device.Dispose(); } catch { /* We do what we can */ } diff --git a/RGB.NET.Core/RGBSurfaceUpdater.cs b/RGB.NET.Core/RGBSurfaceUpdater.cs index 270e571..a7d83cb 100644 --- a/RGB.NET.Core/RGBSurfaceUpdater.cs +++ b/RGB.NET.Core/RGBSurfaceUpdater.cs @@ -66,7 +66,7 @@ namespace RGB.NET.Core { _updateTokenSource?.Dispose(); _updateTokenSource = new CancellationTokenSource(); - _updateTask = Task.Factory.StartNew(UpdateLoop, (_updateToken = _updateTokenSource.Token)); + _updateTask = Task.Factory.StartNew(UpdateLoop, (_updateToken = _updateTokenSource.Token), TaskCreationOptions.LongRunning, TaskScheduler.Default); } else if (!shouldRun && (_updateTask != null)) // Stop task {