public void GetIdStructure()
        {
            var ga1          = new StructureGenerator("H2O", 100, 2000, 0.20);
            var molecule1    = ga1.FindSolution();
            var idStructure1 = _linkService.GetIdStructure(molecule1.LinkEdges);

            Assert.AreEqual("HO2-OH2", idStructure1);

            var ga2          = new StructureGenerator("C2H6O", 100, 2000, 0.20);
            var molecule2    = ga2.FindSolution();
            var idStructure2 = _linkService.GetIdStructure(molecule2.LinkEdges);

            Assert.AreEqual("CC2-CH5-CO1-HC5-HO1-OC1-OH1", idStructure2);
        }
        private void StartSearch()
        {
            try
            {
                CancelSearch();
                ClearCharts();

                var populationSize = Int32.Parse(this.txtPopulationSize.Text);
                var maxGenerations = Int32.Parse(this.txtMaxGenerations.Text);
                var mutationRate   = Double.Parse(this.txtMutationRate.Text);
                var nomenclature   = this.txtNomenclature.Text;

                StartTimer();
                this.searchThread = new Thread(() =>
                {
                    SetStatus("Iniciando população...");
                    ga = new StructureGenerator(nomenclature, populationSize, maxGenerations, mutationRate);
                    StartWatchers();
                    SetStatus("Procurando estrutura molecular...");
                    MoleculeGraph molecule = ga.FindSolution();

                    SetDataSource(gridResult, molecule.LinkEdges.Select(x => new
                    {
                        From = x.From.ToString(),
                        To   = x.To.ToString()
                    }).ToList());

                    SetStatus("Fim!");
                });
                searchThread.Start();

                new Task(() =>
                {
                    while (searchThread != null && searchThread.IsAlive)
                    {
                        Thread.Sleep(500);
                    }

                    SetEnabled(btnCancel, false);
                    SetEnabled(btnSearch, true);
                    timer1.Enabled = false;
                }).Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro: " + ex.Message);
            }
        }