From 5b6af23be8a7483ee5a4aa37ea1cdb0248111463 Mon Sep 17 00:00:00 2001 From: MakesYT <42534870+MakesYT@users.noreply.github.com> Date: Sat, 25 May 2024 01:44:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20=E6=83=85=E6=99=AF?= =?UTF-8?q?=E9=81=87=E5=88=B0=E9=94=99=E8=AF=AF=E8=87=AA=E5=8A=A8=E5=81=9C?= =?UTF-8?q?=E6=AD=A2=E8=BF=90=E8=A1=8C(Tick)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Core/SDKs/CustomScenario/CustomScenario.cs | 26 ++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/Core/SDKs/CustomScenario/CustomScenario.cs b/Core/SDKs/CustomScenario/CustomScenario.cs index 7b440d9..a8cd6e8 100644 --- a/Core/SDKs/CustomScenario/CustomScenario.cs +++ b/Core/SDKs/CustomScenario/CustomScenario.cs @@ -282,6 +282,11 @@ private void StartRun(bool notRealTime, bool onExit = false, params object[] inp return; } + if (_cancellationTokenSource.IsCancellationRequested) + { + return; + } + var connectionItem = connections.FirstOrDefault((e) => e.Source == nodes[1] .Output[0]); if (connectionItem == null || onExit) @@ -333,6 +338,7 @@ private void TickMethod(object sender, long JumpPeriod, long interval) if (_cancellationTokenSource.Token.IsCancellationRequested) { InTick = false; + _tickUtil.Dispose(); break; } @@ -366,16 +372,17 @@ private void TickMethod(object sender, long JumpPeriod, long interval) } } - public void Stop() + public void Stop(bool inTickError = false) { if (!IsRunning) { return; } - _tickUtil?.Dispose(); + try { + _tickUtil?.Dispose(); _cancellationTokenSource.Cancel(); } catch (Exception e) @@ -396,8 +403,17 @@ public void Stop() _initTasks.Clear(); _tickTasks.Clear(); IsRunning = false; - ((IToastService)ServiceManager.Services.GetService(typeof(IToastService))!).Show("情景", $"情景{Name}被用户停止"); - Log.Debug($"情景{Name}被用户停止"); + if (inTickError) + { + ((IToastService)ServiceManager.Services.GetService(typeof(IToastService))!) + .Show("情景", $"情景{Name}由于出现错误被停止"); + Log.Debug($"情景{Name}由于出现错误被停止"); + } + else + { + ((IToastService)ServiceManager.Services.GetService(typeof(IToastService))!).Show("情景", $"情景{Name}被用户停止"); + Log.Debug($"情景{Name}被用户停止"); + } } private void MakeSourcePointState(ConnectorItem targetConnectorItem, PointItem pointItem) @@ -784,6 +800,8 @@ private void ParsePointItem(Dictionary threads, PointItem no Log.Debug(e); ((IToastService)ServiceManager.Services.GetService(typeof(IToastService))!).Show("情景", $"情景{Name}出现错误\n{e.Message}"); + Task.Run(() => { Stop(true); }); + valid = false; goto finnish; }