From 774c9575d4212283a345c0c5e92112182c48be77 Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Fri, 15 Aug 2025 15:25:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E6=95=B0=E7=A0=81=E7=AE=A1=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E8=AF=BB=E5=8F=96/=E5=85=B3=E9=97=AD=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/Hubs/DigitalTubesHub.cs | 10 ++++++++-- server/src/Peripherals/SevenDigitalTubesClient.cs | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/server/src/Hubs/DigitalTubesHub.cs b/server/src/Hubs/DigitalTubesHub.cs index 30627ba..ab82713 100644 --- a/server/src/Hubs/DigitalTubesHub.cs +++ b/server/src/Hubs/DigitalTubesHub.cs @@ -100,7 +100,7 @@ public class DigitalTubesHub : Hub, IDigitalTubesHub return Task.Run(async () => { var cntError = 0; - while (info.IsRunning && !info.CTS.IsCancellationRequested) + while (!info.CTS.IsCancellationRequested) { var beginTime = DateTime.Now; var waitTime = TimeSpan.FromMilliseconds(1000 / info.Frequency); @@ -142,6 +142,11 @@ public class DigitalTubesHub : Hub, IDigitalTubesHub if (!info.IsRunning) { info.IsRunning = true; + if (info.CTS.IsCancellationRequested) + { + info.CTS.Dispose(); + info.CTS = new CancellationTokenSource(); + } _ = ScanAllTubes(info); } } @@ -167,7 +172,8 @@ public class DigitalTubesHub : Hub, IDigitalTubesHub new SevenDigitalTubesCtrl(board.IpAddr, board.Port, 2)) ) is DigitalTubeInfo info) { - if (info.IsRunning) info.IsRunning = false; + info.IsRunning = false; + info.CTS.Cancel(); } return Task.FromResult(true); diff --git a/server/src/Peripherals/SevenDigitalTubesClient.cs b/server/src/Peripherals/SevenDigitalTubesClient.cs index 4c1abc9..733e8a6 100644 --- a/server/src/Peripherals/SevenDigitalTubesClient.cs +++ b/server/src/Peripherals/SevenDigitalTubesClient.cs @@ -52,7 +52,7 @@ public class SevenDigitalTubesCtrl if (ret.Value.Options.Data == null || ret.Value.Options.Data.Length < 4) return new(new Exception("Data length is too short")); - var data = Number.BytesToUInt32(ret.Value.Options.Data, 0, 4, true).Value; + var data = Number.BytesToUInt32(ret.Value.Options.Data, 0, 4).Value; if ((data >> 8) != num) {