Ir ao conteúdo
  • Cadastre-se

C# Ler dados do download usando o BackgroundWorker ProgressChanged


Posts recomendados

Fala galera, beleza? Eu sou muito novo em programação, peguei um projeto de um launcher com autoupdate já pronto e só editei algumas coisas. Ele basicamente faz download dos updates de um jogo.

Eu já mexi com outros projetos antes que usavam somente o WebClient para fazer download, porém esse launcher usa o BackgroundWorker, e até ai não nem problema. Só que esse BackgroundWorker usa o System.ComponentModel.ProgressChangedEventHandler e nele não tem as opções de bytesReceived e totalBytesToReceive como tem no WebClient. Então não consigo pegar os dados do download para mostrar quanto foi baixado e quanto falta.

 

Código usando o WebClient.DownloadProgressChangedEventArgs:

private void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
        downloadLbl.Text = "Downloading Updates";
        label1.Text = e.ProgressPercentage + "%";
        double bytesIn = double.Parse(e.BytesReceived.ToString());
        double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
        double percentage = bytesIn / totalBytes * 100;
        label2.Text = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive;

    }

Se eu coloco esse codigo acima não aparece nenhum erro, porém quando executa o programa e faz o download, a progressbar e os label não funcionam pois está usando BackgroundWorker para download do arquivo.

 

Código usando o BackgroundWorkder ComponentModel.ProgressChangedEventArgs:

 

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {

        progressBar1.Value = e.ProgressPercentage;
        downloadLbl.Text = "Downloading Updates";
        label1.Text = e.ProgressPercentage + "%";
        double bytesIn = double.Parse(e.BytesReceived.ToString());
        double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
        double percentage = bytesIn / totalBytes * 100;
        label2.Text = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive;

    }

Usando esse código a progressbar funciona e o progresso em % do label1 também, mas o label2 com os dados do download e quanto falta pra acabar não funcionam e o TotalBytesToReceive e BytesReceived ficam sublinhados em vermelho com um erro dizendo que "ProgressChangedEventArgs" não contém uma definição para TotalBytesToReceive/BytesReceived.

 

Alguém sabe alguma solução ou gambiarra que eu possa fazer pra resolver esse problema?

Ignorem se tiver algum erro meu, eu comecei a mexer com isso faz menos de uma semana xD Obrigado!!

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Provavelmente em algum ponto do código existe algo como.

BackgroundWorker.ReportProgress(Parametro1);
//ou
BackgroundWorker.ReportProgress(Parametro1, Parametro2);

Caso ele esteja em do evento de progresso do WebClient você poderia alterar para algo como:

private void WebClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) {
//...
//Aqui você passa os dados de progresso(váriavel e) no segundo paramêtro do método ReportProgress
	BackgroundWorker.ReportProgress(Parametro1, e);

E no evento BackgroundWorker.ProgressChanged você iria recuperar as informações assim:

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) {
        DownloadProgressChangedEventArgs we = (DownloadProgressChangedEventArgs)e.UserState;
  
        progressBar1.Value = e.ProgressPercentage;
        downloadLbl.Text = "Downloading Updates";
        label1.Text = e.ProgressPercentage + "%";
        double bytesIn = double.Parse(we.BytesReceived.ToString());
        double totalBytes = double.Parse(we.TotalBytesToReceive.ToString());
        double percentage = bytesIn / totalBytes * 100;
        label2.Text = "Downloaded " + we.BytesReceived + " of " + we.TotalBytesToReceive;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...