Visual – ProgressBar – Timer – BackgroundWorker – ProgressChangedEventHandler – C#

Publicado: 9 de abril de 2014 em C#

Uma barra de progresso é um componente de uma interface gráfica de usuário usado para visualizar a progressão de uma operação de computador estendida, como um download, transferência de arquivos, ou de instalação. Às vezes, o gráfico é acompanhada por uma representação textual do progresso em um formato por cento.

ProgressBar

Representa um controle de barra de progresso do Windows.

Timer

Implementa um timer que gera um evento em intervalos definidos pelo usuário. Desta vez, é otimizado para uso em aplicações Windows Forms e deve ser usado em uma janela.

BackgroundWorker

Executa uma operação em um segmento separado.

ProgressChangedEventHandler

Representa o método que manipulará o evento ProgressChanged da classe BackgroundWorker. Esta classe não pode ser herdada.

Processando Menssagens

Imagine uma barra de progresso que por padrão atinge um valor de 0 à 100, a principio podemos incrementar este valor no evento do clique do botão, porem a GUI sozinha não conseguirá atualizar os frames do andamento do status da barra progresso porque esta ocupada processando o contador do incremento, deste modo podemos ver o progresso vazio(0%) quando iniciar e cheio(100%) quando o contador chegar ao final, entretanto não poderemos ver o andamento desta porcentagem.  Para que possamos ver o andamento precisamos trabalhar os processos simultaneamente, em algumas linguagens de programação como o Delphi por exemplo temos o comando Application.ProcessMessages que executa este trabalho para nós. O C# possui uma classe chamada BackgroundWorker e podemos usa-la para executar um trabalho equivalente ao comando do Delphi para processar mensagens.

progressbar

ProgressBar – BackGroundWorker

 

Exemplo:

Neste exemplo usamos um contador e um temporizador para simular uma tarefa e usamos a classe BackgroundWorker para processar o andamento da tarefa.

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace barraprogresso
{
    public partial class Form1 : Form
    {
        // Declara componentes
        Label rotulo;
        ProgressBar progresso;
        Button botao;
        Timer tempo = new Timer();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            // Muda propriedades do formulario
            this.Text = "DA - Progress Bar";
            this.Size = new Size(240, 150);

            // Cria componentes
            rotulo = new Label();
            progresso = new ProgressBar();
            botao = new Button();

            // Adiciona texto
            rotulo.Text = "Progress Bar";
            botao.Text = "Ok";

            // Adiciona tamanho
            rotulo.Size = new Size(200, 20);
            progresso.Size = new Size(200, 20);

            // Adiciona posição
            rotulo.Location = new Point(12, 20);
            progresso.Location = new Point(12, 40);
            botao.Location = new Point(70, 70);

            // Alinha componenente
            rotulo.TextAlign = ContentAlignment.MiddleCenter;

            // Cria evento do botão
            botao.Click += new System.EventHandler(this.botao_Click);

            // Cria processo de background
            BackgroundWorker backgroundWorker = new BackgroundWorker();

            // Cria evento de progresso
            backgroundWorker.ProgressChanged +=
                new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);

            // Adiciona componentes ao formulario
            this.Controls.Add(rotulo);
            this.Controls.Add(progresso);
            this.Controls.Add(botao);
        }

        // Cria um temporizador
        private void temporizador()
        {
            tempo.Interval = 250;
            tempo.Tick += new EventHandler(andamento);
            tempo.Start();

        }

        // Incrementa a barra de progresso baseado no temporizador
        private void andamento(object sender, EventArgs e)
        {
            progresso.Increment(1);

            if (progresso.Value == progresso.Maximum)
            {
                tempo.Stop();
            }
        }

        // Processa menssagens de progresso
        private void backgroundWorker_ProgressChanged(object sender,
           ProgressChangedEventArgs e)
        {
            progresso.Value = e.ProgressPercentage;
        }

        // Evento de clique do botão
        private void botao_Click(object sender, EventArgs e)
        {
            progresso.Value = 0;
            progresso.Maximum = 100;
            progresso.Step = 1;
            temporizador();
        }
    }
}
Publicidade

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s