/// <summary>
        /// DEFINIMOS UM EVENTO CLIQUE PARA O BOTÃO RESULTADO
        /// </summary>
        private async void ButtonResultado_Click(object sender, RoutedEventArgs e)
        {
            //LIMPAMOS OS CAMPOS DA TELAS
            LabelResultado.Content = String.Empty;
            ListBoxResultado.Items.Clear();
            ButtonResultado.IsEnabled = false;


            //INICIAMOS A CONTAGEM
            DateTime horarioInicio = DateTime.Now;


            #region CALCULO PARA OS DADOS DO CLIENTE


            //PEGAMOS O VALOR QUE USUARIO DIGITOU
            Int32 valorCliente = Convert.ToInt32(TextBoxValor.Text);



            //EXECUTAMOS O CALCULO PARA O RESULTADO DO FATORIAL SINCRONO
            String resultado = await CalculoDeNumerais.RetornaNumerosContadorAsync(valorCliente);



            //COM OS DADOS DE RETORNO NA CLASSE NO AGORA VAMOS USAR O LINQ PARA PEGAR OS DADOS QUE QUEREMOS
            //LINQ DE OBJETOS
            var numerosIndividuais = from d in resultado
                                     group d by d
                                     into dados
                                     orderby dados.Key
                                     select new { Numero = dados.Key, Quantidade = dados.Count() };


            //PREENCHO MINHA LISTA COM OS DADOS DA TELA
            foreach (var i in numerosIndividuais)
            {
                ListBoxResultado.Items.Add(String.Format("O Número {0}: se repete {1:N0}", i.Numero, i.Quantidade));
            }

            #endregion


            //FINALIZAMOS O CONTADOR DE PEGANDO O HORARIO FINAL
            DateTime horarioFinal = DateTime.Now;

            //CALCULAMOS O INTERVALO ENTRE O PERIODO DE INICIO E O FINAL
            TimeSpan intervalo = horarioFinal - horarioInicio;


            //EXIBIMOS A MENSAGEM FINAL PARA O USUARIO
            //COM O CALCULO DE INTERVALO
            LabelResultado.Content = String.Format("O TEMPO FINAL PARA O PROCESSO É DE {0:N3} - segundos", intervalo.TotalSeconds);


            //HABILITAMOS O BOTÃO DE RESULTADO PARA O USUARIO
            ButtonResultado.IsEnabled = true;
        }
        /// <summary>
        /// DEFINIMOS UM EVENTO CLIQUE PARA O BOTÃO RESULTADO
        /// </summary>
        private async void ButtonResultado_Click(object sender, RoutedEventArgs e)
        {
            //LIMPAMOS OS CAMPOS DA TELAS
            ButtonResultado.IsEnabled       = false;
            ButtonCancelar.IsEnabled        = true;
            ProgressBarResultado.Visibility = Visibility.Visible;
            ListBoxResultado.Items.Clear();
            LabelResultado.Content = String.Empty;


            //INICIO A CONTAGEM
            DateTime horarioInicio = DateTime.Now;

            //PEGAMOS O VALOR QUE O USUARIO DIGITOU
            Int32 valorCliente = Convert.ToInt32(TextBoxValor.Text);


            //PASSO A VARIAVEL DE CANCELAMENTO
            _cancellationToken = new CancellationTokenSource();


            try
            {
                //AGORA VAMOS PARA O VALOR DO PROGRESSO
                ProgressBarResultado.Maximum = valorCliente;



                //CRIAMOS UMA VARIAVEL PARA CAPTURAR OS VALORES DA BARRA DE POGRESSO
                Progress <int> progresso = new Progress <int>();
                progresso.ProgressChanged += (s, valorAtual) => ProgressBarResultado.Value = valorAtual;


                //EXECUTAMOS O CALCULO PARA O RESULTADO DO FATORIAL SINCRONO
                String resultado = await CalculoDeNumerais.RetornaNumerosContadorAsyncCancelProgress(valorCliente, _cancellationToken.Token, progresso);



                //COM OS DADOS DE RETORNO NA CLASSE NO AGORA VAMOS USAR O LINQ PARA PEGAR OS DADOS QUE QUEREMOS
                //LINQ DE OBJETOS
                var numerosIndividuais = from b in resultado
                                         group b by b
                                         into dados
                                         orderby dados.Key
                                         select new { Numero = dados.Key, Quantidade = dados.Count() };


                //PREENCHO MINHA LISTA COM OS DADOS DA TELA
                foreach (var item in numerosIndividuais)
                {
                    ListBoxResultado.Items.Add(String.Format("O Número {0}: se repete {1:N0}", item.Numero, item.Quantidade));
                }



                //FINALIZAMOS O CONTADOR DE PEGANDO O HORARIO FINAL
                DateTime horarioFinal = DateTime.Now;


                //CALCULAMOS O INTERVALO ENTRE O PERIODO DE INICIO E O FINAL
                TimeSpan intervalo = horarioFinal - horarioInicio;



                //EXIBIMOS A MENSAGEM FINAL PARA O USUARIO
                //COM O CALCULO DE INTERVALO
                LabelResultado.Content = String.Format(" O TEMPO FINAL PARA O PROCESSO É DE {0:N3} - segundos", intervalo.TotalSeconds);
            }



            //CASO O CLIENTE CLIQUE NO BOTÃO DE CANCELAR SERÁ EXECUTADO UMA OperationCanceledException
            //COM ESSE OperationCanceledException CAPTURAMOS O FINAL DO CLIQUE DE CANCELAR
            //E EXIBIMOS UMA MENSAGEM PARA O CLIENTE
            catch (OperationCanceledException)
            {
                LabelResultado.Content = String.Format("O USUARIO CANCELOU A OPERAÇÃO...");
            }


            //HABILITAMOS O BOTÃO DE RESULTADO PARA O USUARIO
            ButtonResultado.IsEnabled       = true;
            ButtonCancelar.IsEnabled        = false;
            ProgressBarResultado.Visibility = Visibility.Hidden;
        }