using MvCameraControl; using MvvmScaffoldFrame48.DLL.CameraTools; using MvvmScaffoldFrame48.Model.ResultModel; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace MvvmScaffoldFrame48.DLL.ThreadManager { public class ThreadManager { private readonly CameraGroup[] _cameraGroups = new CameraGroup[1]; private readonly CommunicationThread _communicationThread; public ThreadManager() { HikVision.GetCameraList(out List cameraInfoList); // 初始化四个相机组 for (int i = 0; i < _cameraGroups.Count(); i++) { _cameraGroups[i] = new CameraGroup { CameraId = i, ImageQueue = new ConcurrentQueue(), QueueSemaphore = new SemaphoreSlim(0), Camera = new HikCamera(cameraInfoList[i]) }; _cameraGroups[i].ImageProcessor = new ProcessingAlgorithm(); // 订阅处理结果事件 _cameraGroups[i].ProcessResultAvailable += OnProcessResultAvailable; } // 初始化通信和显示线程 _communicationThread = new CommunicationThread(); } /// /// 处理相机处理结果 /// private void OnProcessResultAvailable(object sender, CameraProcessEventArgsResultModel e) { // 将处理结果发送到通信线程 _communicationThread.SendData(e); // 可以在这里添加其他处理逻辑,如更新显示等 Console.WriteLine($"收到相机{e.CameraId}的处理结果"); } /// /// 启动指定相机组 /// public void StartCameraGroup(int cameraId) { if (cameraId >= 0 && cameraId < _cameraGroups.Count()) { _cameraGroups[cameraId].Start(); } } /// /// 停止指定相机组 /// public void StopCameraGroup(int cameraId) { if (cameraId >= 0 && cameraId < 4) { _cameraGroups[cameraId].Stop(); } } /// /// 启动通信线程 /// public void StartCommunication() { _communicationThread.Start(); } /// /// 停止通信线程 /// public void StopCommunication() { _communicationThread.Stop(); } /// /// 启动所有线程 /// public void StartAll() { for (int i = 0; i < 4; i++) { StartCameraGroup(i); } StartCommunication(); } /// /// 停止所有线程 /// public void StopAll() { for (int i = 0; i < 4; i++) { StopCameraGroup(i); } StopCommunication(); } /// /// 获取相机组运行状态 /// public bool IsCameraGroupRunning(int cameraId) { return cameraId >= 0 && cameraId < 4 && _cameraGroups[cameraId].IsRunning; } /// /// 获取通信线程运行状态 /// public bool IsCommunicationRunning => _communicationThread.IsRunning; } }