private void NotifyListeners(Portrait portrait, IEnumerable <RepositoryCompareResult> matches)
        {
            foreach (var match in matches)
            {
                var args = new PersonOfInterestDetectionResult
                {
                    Details    = match.PersonInfo,
                    Portrait   = portrait,
                    Similarity = match.Similarity
                };

                if (EventAggregator != null)
                {
                    EventAggregator.PublishFaceMatchEvent(args);
                }
            }
        }
        public void AddSuspects(PersonOfInterestDetectionResult compareResult)
        {
            this.listPersons.Add(compareResult);

            var lvi = new ListViewItem(new string[] { "",
                                                      //compareResult.Details.Name,
                                                      //compareResult.Details.Gender.ToString(),
                                                      //compareResult.Details.Age.ToString(),
                                                      //compareResult.Details.ID,
                                                      string.Empty });

            lvi.Tag = compareResult;
            var added = this.suspectsList.Items.Add(lvi);

            suspectsList.SelectedItems.Clear();
            suspectsList.EnsureVisible(this.suspectsList.Items.Count - 1);

            this.suspectsList.Items[this.suspectsList.Items.Count - 1].Selected = true;

            if (!Visible)
            {
                this.Show(Application.OpenForms[0]);
            }
        }
        private void WorkerThread()
        {
            while (true)
            {
                _tokenSource.Token.ThrowIfCancellationRequested();

                this.goSignal.WaitOne();

                var portraits = this.Dequeue();
                if (portraits == null)
                {
                    continue;
                }

                if (portraits.Count == 0)
                {
                    return;
                }

                foreach (var portrait in portraits)
                {
                    var fs = new FaceSpecification();
                    var canCompare = _faceComparer.CalcFeature(portrait.GetIpl(), fs);
                    if (canCompare)
                    {
                        var tgs = Targets;
                        foreach (var targetPerson in tgs)
                        {
                            _tokenSource.Token.ThrowIfCancellationRequested();
                            var ts = new FaceSpecification();
                            ts.EyebrowRatio = targetPerson.EyebrowRatio;
                            ts.EyebrowShape = targetPerson.EyeBrowShape;
                            ts.Features = targetPerson.FeaturePoints;
                            var compareResults = _faceComparer.CmpFace(fs, ts);
                            if (compareResults > 70)
                            {
                                var fdr = new PersonOfInterestDetectionResult()
                                              {
                                                  Similarity = compareResults,
                                                  Suspect = portrait,
                                                  Target = targetPerson
                                              };
                                Mediator.Instance.NotifyColleagues(fdr);
                            }
                        }
                    }

                }

            }
        }