public EyeClicker(CMSTrackingSuiteAdapter cmsTrackingSuiteAdapter,
                   BlinkLinkEyeClickData blinkLinkEyeClickData)
 {
     workerUpdateDataMutex = new object();
     eyeStatusWindow       = (EyeStatusWindow)cmsTrackingSuiteAdapter.CreateForm(typeof(EyeStatusWindow));
     eyeClickerResetOnly   = false;
     timer = new Stopwatch();
     this.blinkLinkEyeClickData   = blinkLinkEyeClickData;
     this.cmsTrackingSuiteAdapter = cmsTrackingSuiteAdapter;
     leftEyeBlinkDetector         = new NccBlinkDetector(true, cmsTrackingSuiteAdapter);
     rightEyeBlinkDetector        = new NccBlinkDetector(false, cmsTrackingSuiteAdapter);
     stageTime               = 0;
     firstUpdate             = true;
     currentStage            = Stages.Start;
     waitHandler             = new AutoResetEvent(false);
     updateDataMutex         = new object();
     updateData              = null;
     xDistanceBetweenEyesSet = false;
     workerThread            = new Thread(new ThreadStart(workerThreadMain));
     workerThread.Priority   = ThreadPriority.Highest;
     workerThread.Start();
     clickerFSM = new EyeClickerFiniteStateMachine(blinkLinkEyeClickData, eyeStatusWindow);
 }