private async void btnGerarRedirects_Click(object sender, EventArgs e) { if (FuncaoBotaoProcessamento == BotaoProcessamento.IniciarProcessamento) { if (string.IsNullOrEmpty(_caminhoSitemapAntigo) || string.IsNullOrEmpty(_caminhoSitemapAtual)) { MessageBox.Show("Defina os dois arquivos de sitemap para continuar!", "Operação não pôde continuar", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } // Mudar função deste botão para Cancelar FuncaoBotaoProcessamento = BotaoProcessamento.CancelarProcessamento; //Acompanhar progresso da tarefa Progress <ProgressoDaTarefa> progressoDaTarefa = new Progress <ProgressoDaTarefa>(); progressoDaTarefa.ProgressChanged += ProgressoDaTarefa_ProgressChanged; var assitirProgresso = System.Diagnostics.Stopwatch.StartNew(); try { //Iniciar processamento da Tarefa await IniciarProcessamentoAsync(progressoDaTarefa, _cancelarProcessamento.Token); } catch (OperationCanceledException) { this.UseWaitCursor = false; _cancelarProcessamento = new CancellationTokenSource(); pgbProgresso.Value = 0; lblEtapaAtual.Text = "Operação Cancelada pelo Usuário!"; lblEtapaAtual.BackColor = Color.LightPink; FuncaoBotaoProcessamento = BotaoProcessamento.IniciarProcessamento; } catch (Exception erro) { this.UseWaitCursor = false; MessageBox.Show("Aconteceu um erro: " + erro.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); pgbProgresso.Value = 0; lblEtapaAtual.Text = "Aconteceu um erro! Tente novamente"; lblEtapaAtual.BackColor = Color.LightPink; FuncaoBotaoProcessamento = BotaoProcessamento.IniciarProcessamento; } assitirProgresso.Stop(); } else if (FuncaoBotaoProcessamento == BotaoProcessamento.CancelarProcessamento) { _cancelarProcessamento.Cancel(); } }
/// <summary> /// Formata a aparência do botão de processamento para assumir a função de Iniciar ou Cancelar o processamento /// </summary> /// <param name="pFuncaoBotao"></param> private void FormatarBotaoDeProcessamento(BotaoProcessamento pFuncaoBotao) { if (pFuncaoBotao == BotaoProcessamento.IniciarProcessamento) { btnGerarRedirects.BackColor = SystemColors.Highlight; btnGerarRedirects.Text = "Gerar Redirects"; btnGerarRedirects.Image = Properties.Resources.icone_gerar_redirect; } else if (pFuncaoBotao == BotaoProcessamento.CancelarProcessamento) { btnGerarRedirects.BackColor = Color.Firebrick; btnGerarRedirects.Text = "Cancelar"; btnGerarRedirects.Image = Properties.Resources.icone_cancelar; } }
private void ProgressoDaTarefa_ProgressChanged(object sender, ProgressoDaTarefa e) { pgbProgresso.Value = e.Progresso; lblEtapaAtual.Text = e.EtapaAtual; if (e.Progresso < 100) { this.UseWaitCursor = true; FuncaoBotaoProcessamento = BotaoProcessamento.CancelarProcessamento; lblEtapaAtual.BackColor = Color.LightGray; } else { this.UseWaitCursor = false; FuncaoBotaoProcessamento = BotaoProcessamento.IniciarProcessamento; lblEtapaAtual.BackColor = Color.LightGreen; } }