using Cowain.Bake.BLL; using Cowain.Bake.Common; using Cowain.Bake.Common.Core; using Cowain.Bake.Common.Enums; using Cowain.Bake.Communication.Interface; using Cowain.Bake.Model; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; using Unity; namespace Cowain.Bake.Communication.Scan { public class ScanCodeManage { private List scanCodeList; IUnityContainer _unityContainer; public ScanCodeManage(IUnityContainer unityContainer) { _unityContainer = unityContainer; scanCodeList = unityContainer.Resolve().GetConfig(EDeviceType.SCANNER); List listTask = new List(); foreach (var item in scanCodeList) { Assembly asm = Assembly.GetExecutingAssembly(); //获得当前程序的绝对路径 Type type = asm.GetType(MyPath.SCAN + item.DriverName); unityContainer.RegisterSingleton(typeof(IScanCodeBase), type, item.Name); var scanCode = _unityContainer.Resolve(item.Name); //几个PLC,就实例化几个 scanCode.Id = item.Id; scanCode.Name = item.Name; scanCode.DeviceName = item.DriverName; scanCode.GetJsonParam(item.Json); if (item.Enable) { listTask.Add(Task.Run(() => { scanCode.Connect(); })); } } Task.WaitAll(listTask.ToArray()); Task.Run(async () => { while(true) { await Task.Delay(5000); CheckConnect(); } }); } void CheckConnect() { var scanCodes = _unityContainer.ResolveAll(); foreach(var item in scanCodes) { bool b = item.IsConnect; } } } }