using LampInspectionMachine.Cameralibs.HKCamera; using LampInspectionMachine.Model; using MvCamCtrl.NET; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace LampInspectionMachine.Cameralibs { public class CameraService { private readonly Dictionary _CameraCollection; public CameraService() { _CameraCollection = new Dictionary(); } public List GetDeviceEnum() { GC.Collect(); List m_ltDeviceList = new List(); int nRet = CSystem.EnumDevices(CSystem.MV_GIGE_DEVICE | CSystem.MV_USB_DEVICE, ref m_ltDeviceList); if ( 0 != nRet ) { throw new Exception("Enumerate devices fail!"); } List listsn = new List(); MyCamera.MV_CC_DEVICE_INFO device = default(MyCamera.MV_CC_DEVICE_INFO); for ( int i = 0; i < m_ltDeviceList.Count; i++ ) { if ( m_ltDeviceList[ i ].nTLayerType == CSystem.MV_GIGE_DEVICE ) { CGigECameraInfo gigeInfo = (CGigECameraInfo)m_ltDeviceList[i]; listsn.Add(gigeInfo.chSerialNumber); } else if ( m_ltDeviceList[ i ].nTLayerType == CSystem.MV_USB_DEVICE ) { CGigECameraInfo usbInfo = (CGigECameraInfo)m_ltDeviceList[i]; listsn.Add(usbInfo.chSerialNumber); } } return listsn; } public bool CreateCamera(Guid id ,CameraInfo cameraInfo) { ICamera camera = new MvCamera(id, cameraInfo.SerialNumber); if ( _CameraCollection.ContainsKey(id) ) { var currenCamera = _CameraCollection[id]; currenCamera.CloseDevice(); } else { _CameraCollection.Add(id, camera); } return true; } public Task CreateCameraAsync(Guid id, CameraInfo cameraInfo) { ICamera camera= new MvCamera(id, cameraInfo.SerialNumber); if ( _CameraCollection.ContainsKey(id) ) { var currenCamera = _CameraCollection[id]; currenCamera.CloseDevice(); } else { _CameraCollection.Add(id, camera); } return Task.FromResult(true); } public ICamera GetCamera(Guid id) { return _CameraCollection[ id ]; } public Task GetCameraAsync(Guid id) { return Task.FromResult(_CameraCollection[ id ]); } public void UnRegisterCamera(Guid id) { if ( _CameraCollection.ContainsKey(id) ) { var camera = _CameraCollection[id]; camera.CloseDevice(); } } public Task UnRegisterCameraAsync(Guid id) { if ( _CameraCollection.ContainsKey(id) ) { var camera = _CameraCollection[id]; camera.CloseDevice(); } return Task.CompletedTask; } public void Dispose() { foreach ( var camera in _CameraCollection ) { try { camera.Value.CloseDevice(); } catch ( Exception ) { } } } } }