public void InvokeOnThrowDetected(DetectedThrow thrw, bool debug = false)
        {
            if (thrw != null)
            {
                OnThrowDetected?.Invoke(thrw);

                if (!debug)
                {
                    Application.Current.Dispatcher.Invoke(() => { camsDetectionBoard.PrintAndDrawThrow(thrw); });
                }
            }
        }
        private void FindThrowOnRemainingCams(CamService succeededCam)
        {
            logger.Info($"Finding throws from remaining cams start. Succeeded cam: {succeededCam.camNumber}");

            foreach (var cam in cams.Where(cam => cam != succeededCam))
            {
                cam.FindThrow();
                cam.FindAndProcessDartContour();
            }

            var thrw = throwService.GetThrow();

            if (thrw != null)
            {
                OnThrowDetected?.Invoke(thrw);
            }

            logger.Info($"Finding throws from remaining cams end");
        }
        public void InvokeOnThrowDetected(DetectedThrow thrw, bool manualThrow = false)
        {
            if (thrw != null)
            {
                Application.Current.Dispatcher.Invoke(() =>
                {
                    OnThrowDetected?.Invoke(thrw);

                    if (workingMode == DetectionServiceWorkingMode.Crossing)
                    {
                        camsDetectionBoard.DrawThrow(thrw);
                        return;
                    }

                    if (!manualThrow)
                    {
                        camsDetectionBoard.PrintThrow(thrw);
                        camsDetectionBoard.DrawThrow(thrw);
                    }
                });
            }
        }
 public void InvokeOnThrowDetected(DetectedThrow thrw)
 {
     OnThrowDetected?.Invoke(thrw);
 }