From e814a1af29606d8c67ede3c3f2c75b40cd7d895c Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sat, 5 Aug 2017 20:46:31 +0200 Subject: [PATCH] Fixed a potential problem with the update-thread keeping an application running even if shutdown was requested --- RGB.NET.Core/RGBSurface.cs | 3 +++ RGB.NET.Core/RGBSurfaceUpdater.cs | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) 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 {