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!