public CamService(MainWindow mainWindow,
                          string parentGridName,
                          CamServiceWorkingMode mode = CamServiceWorkingMode.Work)
        {
            this.mode           = mode;
            this.mainWindow     = mainWindow;
            this.parentGridName = parentGridName;
            logger         = MainWindow.ServiceContainer.Resolve <Logger>();
            drawService    = MainWindow.ServiceContainer.Resolve <DrawService>();
            configService  = MainWindow.ServiceContainer.Resolve <ConfigService>();
            measureService = new MeasureService(this);

            var camIndex = -1;

            switch (parentGridName)
            {
            case "Cam1Grid":
                camNumber  = 1;
                setupPoint = new PointF(configService.Read <float>(SettingsType.Cam1X),
                                        configService.Read <float>(SettingsType.Cam1Y));
                camIndex = GetCamIndex(SettingsType.Cam1Id);
                break;

            case "Cam2Grid":
                camNumber  = 2;
                setupPoint = new PointF(configService.Read <float>(SettingsType.Cam2X),
                                        configService.Read <float>(SettingsType.Cam2Y));
                camIndex = GetCamIndex(SettingsType.Cam2Id);
                break;

            case "Cam3Grid":
                camNumber  = 3;
                setupPoint = new PointF(configService.Read <float>(SettingsType.Cam3X),
                                        configService.Read <float>(SettingsType.Cam3Y));
                camIndex = GetCamIndex(SettingsType.Cam3Id);
                break;

            case "Cam4Grid":
                camNumber  = 4;
                setupPoint = new PointF(configService.Read <float>(SettingsType.Cam4X),
                                        configService.Read <float>(SettingsType.Cam4Y));
                camIndex = GetCamIndex(SettingsType.Cam4Id);
                break;
            }

            resolutionWidth  = configService.Read <int>(SettingsType.ResolutionWidth);
            resolutionHeight = configService.Read <int>(SettingsType.ResolutionHeight);
            movesExtraction  = configService.Read <int>(SettingsType.MovesExtraction);
            movesDart        = configService.Read <int>(SettingsType.MovesDart);
            movesNoise       = configService.Read <int>(SettingsType.MovesNoise);
            smoothGauss      = configService.Read <int>(SettingsType.SmoothGauss);
            toBullAngle      = MeasureService.FindAngle(setupPoint, DrawService.projectionCenterPoint);
            videoCapture     = new VideoCapture(camIndex, VideoCapture.API.DShow);
            videoCapture.SetCaptureProperty(CapProp.FrameWidth, resolutionWidth);
            videoCapture.SetCaptureProperty(CapProp.FrameHeight, resolutionHeight);
            GetSlidersData();
            RefreshImageBoxes();
        }
        public void PrepareCamsAndTryCapture(CamServiceWorkingMode workingMode = CamServiceWorkingMode.Detection)
        {
            this.workingMode = workingMode;
            cams             = new List <CamService>();
            var cam1Active = configService.Read <bool>(SettingsType.Cam1CheckBox) && !App.NoCams;
            var cam2Active = configService.Read <bool>(SettingsType.Cam2CheckBox) && !App.NoCams;
            var cam3Active = configService.Read <bool>(SettingsType.Cam3CheckBox) && !App.NoCams;
            var cam4Active = configService.Read <bool>(SettingsType.Cam4CheckBox) && !App.NoCams;

            if (cam1Active)
            {
                cams.Add(new CamService(mainWindow, mainWindow.Cam1Grid.Name, workingMode)); // todo extenstion method... or not
            }

            if (cam2Active)
            {
                cams.Add(new CamService(mainWindow, mainWindow.Cam2Grid.Name, workingMode));
            }

            if (cam3Active)
            {
                cams.Add(new CamService(mainWindow, mainWindow.Cam3Grid.Name, workingMode));
            }

            if (cam4Active)
            {
                cams.Add(new CamService(mainWindow, mainWindow.Cam4Grid.Name, workingMode));
            }

            cts         = new CancellationTokenSource();
            cancelToken = cts.Token;

            extractionSleepTime   = configService.Read <double>(SettingsType.ExtractionSleepTime);
            thresholdSleepTime    = configService.Read <double>(SettingsType.ThresholdSleepTime);
            moveDetectedSleepTime = configService.Read <double>(SettingsType.MoveDetectedSleepTime);
            withDetection         = configService.Read <bool>(SettingsType.WithDetectionCheckBox) && !App.NoCams;

            foreach (var cam in cams)
            {
                cam.TryQueryFrame();
            }
        }