From 7828c5790cfa368d01cdce6ce22dfac208450b54 Mon Sep 17 00:00:00 2001 From: gil zhang Date: Sun, 20 Nov 2022 23:04:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E7=BA=BF=E7=A8=8B=E4=BC=91?= =?UTF-8?q?=E7=9C=A0=EF=BC=8C=E5=BC=82=E5=B8=B8=E6=8D=95=E8=8E=B7=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ElectronBot.BraincasePreview/App.xaml.cs | 3 +- .../Helpers/EmojiPlayHelper.cs | 24 +++++--- .../CameraEmojis/IntelligenceService.cs | 10 +-- .../ViewModels/MainViewModel.cs | 6 ++ src/ElectronBot.DotNet/ElectronLowLevel.cs | 61 ++++++++++++------- 5 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/ElectronBot.BraincasePreview/App.xaml.cs b/src/ElectronBot.BraincasePreview/App.xaml.cs index 9fffa0e..87c08b5 100644 --- a/src/ElectronBot.BraincasePreview/App.xaml.cs +++ b/src/ElectronBot.BraincasePreview/App.xaml.cs @@ -195,11 +195,12 @@ public partial class App : Application IntelligenceService.Current.CleanUp(); await CameraService.Current.CleanupMediaCaptureAsync(); + + EmojiPlayHelper.Current.CancellationToken.Cancel(); } catch (Exception) { } - System.Environment.Exit(0); } } diff --git a/src/ElectronBot.BraincasePreview/Helpers/EmojiPlayHelper.cs b/src/ElectronBot.BraincasePreview/Helpers/EmojiPlayHelper.cs index 29b6f85..417c9ce 100644 --- a/src/ElectronBot.BraincasePreview/Helpers/EmojiPlayHelper.cs +++ b/src/ElectronBot.BraincasePreview/Helpers/EmojiPlayHelper.cs @@ -1,18 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using Verdure.ElectronBot.Core.Models; +using Verdure.ElectronBot.Core.Models; namespace ElectronBot.BraincasePreview.Helpers; public class EmojiPlayHelper { - private static EmojiPlayHelper _current; + private static EmojiPlayHelper? _current; public static EmojiPlayHelper Current => _current ??= new EmojiPlayHelper(); private readonly Queue _actonFrame = new(); private readonly object _actonFrameLock = new(); + public CancellationTokenSource CancellationToken + { + get; set; + } = new(); + public int Interval { get; set; @@ -20,10 +22,14 @@ public class EmojiPlayHelper public void Start() { - var thread = new Thread(RunPlayAsync); + // var thread = new Thread(RunPlayAsync, CancellationToken.Token); + + var task = new Task(RunPlayAsync, CancellationToken.Token); + + task.Start(); //thread.IsBackground = true; - thread.Start(); + //thread.Start(); } public void Clear() @@ -63,6 +69,10 @@ public class EmojiPlayHelper Thread.Sleep(Interval); } + else + { + Thread.Sleep(3000); + } } } diff --git a/src/ElectronBot.BraincasePreview/Services/CameraEmojis/IntelligenceService.cs b/src/ElectronBot.BraincasePreview/Services/CameraEmojis/IntelligenceService.cs index 339a7f1..206e5fa 100644 --- a/src/ElectronBot.BraincasePreview/Services/CameraEmojis/IntelligenceService.cs +++ b/src/ElectronBot.BraincasePreview/Services/CameraEmojis/IntelligenceService.cs @@ -1,19 +1,12 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; -using System.Threading.Tasks; -using ElectronBot.BraincasePreview.Models; using Microsoft.AI.MachineLearning; -using Microsoft.UI.Xaml.Media.Imaging; using Windows.Graphics.Imaging; using Windows.Media; using Windows.Media.FaceAnalysis; using Windows.Storage; -using Windows.UI.Core; namespace ElectronBot.BraincasePreview.Services; public class IntelligenceService @@ -107,7 +100,8 @@ public class IntelligenceService { if (!_isInitialized) { - throw new InvalidOperationException("Service not initialized."); + return; + //throw new InvalidOperationException("Service not initialized."); } CameraService.Current.SoftwareBitmapFrameCaptured -= Current_SoftwareBitmapFrameCaptured; diff --git a/src/ElectronBot.BraincasePreview/ViewModels/MainViewModel.cs b/src/ElectronBot.BraincasePreview/ViewModels/MainViewModel.cs index 0e74ca5..5436533 100644 --- a/src/ElectronBot.BraincasePreview/ViewModels/MainViewModel.cs +++ b/src/ElectronBot.BraincasePreview/ViewModels/MainViewModel.cs @@ -183,6 +183,12 @@ public partial class MainViewModel : ObservableRecipient, INavigationAware } + Thread.Sleep(1000); + + if (ElectronBotHelper.Instance.SerialPort.IsOpen) + { + ElectronBotHelper.Instance.SerialPort.Close(); + } } [RelayCommand] diff --git a/src/ElectronBot.DotNet/ElectronLowLevel.cs b/src/ElectronBot.DotNet/ElectronLowLevel.cs index 8d146c0..2094c94 100644 --- a/src/ElectronBot.DotNet/ElectronLowLevel.cs +++ b/src/ElectronBot.DotNet/ElectronLowLevel.cs @@ -285,26 +285,34 @@ public class ElectronLowLevel : IElectronLowLevel var _packetCount = packetCount; - do + try { - ErrorCode ec; do { - var readBuffer = new byte[packetSize]; + ErrorCode ec; + do + { + var readBuffer = new byte[packetSize]; - ec = reader!.Read(readBuffer, 5000, out _); + ec = reader!.Read(readBuffer, 5000, out _); - extraDataBufferRx = readBuffer; + extraDataBufferRx = readBuffer; - } while (ec != ErrorCode.Success); + } while (ec != ErrorCode.Success); - _packetCount--; + _packetCount--; - } while (_packetCount > 0); + } while (_packetCount > 0); - stopwatch.Stop(); + stopwatch.Stop(); - Console.WriteLine($"time- ReceivePacket time{stopwatch.ElapsedMilliseconds}"); + Console.WriteLine($"time- ReceivePacket time{stopwatch.ElapsedMilliseconds}"); + + } + catch (Exception) + { + // todo:异常处理 + } return _packetCount == 0; } @@ -318,29 +326,36 @@ public class ElectronLowLevel : IElectronLowLevel var dataOffset = 0; - do + try { - ErrorCode ec; do { - ec = writer!.Write(buffer, frameBufferOffset + dataOffset, packetSize, 2000, out _); - - if (packetSize % 512 == 0) + ErrorCode ec; + do { - ec = writer.Write(buffer, frameBufferOffset + dataOffset, 0, 2000, out _); - } + ec = writer!.Write(buffer, frameBufferOffset + dataOffset, packetSize, 2000, out _); - } while (ec != ErrorCode.None); + if (packetSize % 512 == 0) + { + ec = writer.Write(buffer, frameBufferOffset + dataOffset, 0, 2000, out _); + } - dataOffset += packetSize; + } while (ec != ErrorCode.None); - _packetCount--; + dataOffset += packetSize; - } while (_packetCount > 0); + _packetCount--; - stopwatch.Stop(); + } while (_packetCount > 0); - Console.WriteLine($"time- TransmitPacket time{stopwatch.ElapsedMilliseconds}"); + stopwatch.Stop(); + + Console.WriteLine($"time- TransmitPacket time{stopwatch.ElapsedMilliseconds}"); + } + catch (Exception) + { + // todo:异常处理 + } return _packetCount == 0; }