Array
(
)

Progress Bar durante compactação de diretório

Pestanajr
   - 30 set 2008

Acompanhei uma video aula sobre compactação e descompactação de arquivos e diretório e gostaria de saber se alguém saberia como utilizar uma progress bar durante a execução desta ação de descompactação ou compactação. Acontece que durante este proceso o mouse fica com a ampulheta parecendo estar congelado o programa, quando na verdade ele está apenas fazendo seu trabalho.

Obrigado

Pestana Jr

Codename.v
   - 03 out 2008

A progress bar funciona da seguinte maneira:

Vamos supor que você tenha um Form chamado FormExemplo e que este Form possua um componente ProgressBar e um componente Button chamados respectivamente pbExemplo e btnProcessar. Sendo assim, segue o código de exemplo.

#Código

/*
Evento Load do Form chamado para inicializar algumas propriedades da ProgressBar.
*/
private void FormExemplo_Load(object sender, EventArgs e)
{
        /*
        Algumas das principais propriedades da ProgressBar são
        inicializadas aqui. A propriedade Minimum corresponde ao
        valor inicial da ProgressBar. Seu valor default é 0 que representa
        o inicio da barra.
        */
        pbExemplo.Minimum = 0;
        
        /*
        A propriedade Maximum representa o número maximo de passos
        realizados pela ProgressBar.
        */
        pbExemplo.Maximum = 100;

        /*
        Por ultimo a propriedade Step representa de quantos em quantos
        passos a ProgressBar sera incrementada.
        */
        pbExemplo.Step = 1;
}

/*
Evento de Click do botão btnProcessar que realiza um processo de contagem até 10000 incremento a ProgressBar.
*/
private void btnProcessar_Click(object sender, EventArgs e)
{
        /*
        Loop for que realiza a contagem de 0 a 9999.
        */
         for (int contador = 0; contador < 10000; contador++)
         {
                /*
                Se a variável contador mod 100 for igual a 2, ou seja, se
                ela for igual a 100, sera chamado o método PerformStep da
                ProgressBar que utiliza o valor da propriedade Step para
                incrementar a barra. Em seguida chamamos o método Sleep
                da classe Thread apenas para que o processo possa ser
                observado. Obs.: O método Sleep não tem nada a ver com
                a ProgressBar.
                */
                if ((contador ¬ 100) == 2)
                {
                    pbExemplo.PerformStep();
                    System.Threading.Thread.Sleep(40);
                }
         }
}


Sendo assim, estamos incrementando a barra toda vez que contador for igual a 100 até que o mesmo chgue em 9999, ou seja, 100 x 100 = 10000. Concluímos então que foram realizados 100 passos de um em um até que fosse atingido o valor maximo da barra.

Para a sua compactação seria mais ou menos a mesma coisa só que você teria que guardar dentro da propriedade Maximum o tamanho do arquivo que está a ser compactado (se não me engano :oops:).
Seria uma boa se você postasse algum código.

Abraços!