• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Weasel

[VB.NET 2005] BackgroundWorker

5 mensagens neste tópico

Olá mais uma vez pessoal!

É assim,  vi aqui num topico ao lado a falar sobre o BackgroundWorker (até á data desconhecia isto) li, usei e gostei, funciona muito bem, mas no exemplo (este http://portugalcode.com/index.php/topic,287.0.html ) têm um ciclo For para ir dando valores á progressbar, ora, eu na minha aplicação tenho no backgroundworker uma rotina que copia um directorio para outra localização, aqui o ciclo For não se aplica, como posso usar no meu caso para ir dando valores á progressbar ?

O meu código é qualquercoisa como isto:

Private Sub back1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles back1.DoWork
           Application.DoEvents()
                Try
                    If chk_box.Checked Then
                        backup = path + Date.Today + "\novo\conf"
                        backup2 = path + Date.Today + "\velho\conf"
                        My.Computer.FileSystem.CopyDirectory(dest1, backup, True)
                        My.Computer.FileSystem.CopyDirectory(velho, backup2, True)
                        wTXT()
                    End If
                 My.Computer.FileSystem.CopyDirectory(dest1, dest2, True)
                 My.Computer.FileSystem.CopyDirectory(dest1, dest3, True)
                 My.Computer.FileSystem.CopyDirectory(dest1, dest4, True)
                 My.Computer.FileSystem.CopyDirectory(dest1, dest5, True)
                 My.Computer.FileSystem.CopyDirectory(dest1, dest6, True)
                 wait.Close()
                 MsgBox("Cópias completas.", MsgBoxStyle.Information, _
                  "Cópias completas.")
                Catch ex As Exception
                    wait.Close()
                    MsgBox("Não foi possivél copiar: " _
                    & ex.Message, MsgBoxStyle.Critical, _
                    "Erro.")
              End Try
End Sub

Quando corro este código abro uma form chamada wait que diz ao utilizado para aguardar que as copias estão a ser feitas, mas gostava de ter uma progressbar a informar o progresso das copias...

Alguém sabe como ?  Obrigado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a maneira mais fácil é capaz de ser meteres a propriedade maximum da progressbar em 7 e ires aumentando o value (através do ReportProgress) sempre que copias um directório. Tens é de ter em conta aquele if. Se Checked for False metes logo o value em 2 :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pus assim, mas deu erro, este erro:

semttulolw4.jpg

Private Sub back1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles back1.DoWork
        Dim report As System.ComponentModel.BackgroundWorker = DirectCast(sender, System.ComponentModel.BackgroundWorker)
        Application.DoEvents()
        Try
                    If chk_box.Checked Then
                        backup = path + Date.Today + "\novo\conf"
                        backup2 = path + Date.Today + "\velho\conf"
                        My.Computer.FileSystem.CopyDirectory(dest1, backup, True)
                        report.ReportProgress(1)
                        My.Computer.FileSystem.CopyDirectory(velho, backup2, True)
                        report.ReportProgress(2)
                        wTXT()
                    Else
                        report.ReportProgress(2)
                    End If
                    My.Computer.FileSystem.CopyDirectory(dest1, dest2, True)
                    report.ReportProgress(3)
                    My.Computer.FileSystem.CopyDirectory(dest1, dest3, True)
                    report.ReportProgress(4)
                    My.Computer.FileSystem.CopyDirectory(dest1, dest4, True)
                    report.ReportProgress(5)
                    My.Computer.FileSystem.CopyDirectory(dest1, dest5, True)
                    report.ReportProgress(6)
                    My.Computer.FileSystem.CopyDirectory(dest1, dest6, True)
                    report.ReportProgress(7)
                    wait.Close()
                    MsgBox("Cópias completas.", MsgBoxStyle.Information, _
            "Cópias completas.")
                Catch ex As Exception
                    wait.Close()
                    MsgBox("Não foi possivél copiar: " _
                    & ex.Message, MsgBoxStyle.Critical, _
                    "Erro.")
             End Try
End Sub

Private Sub back1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles back1.ProgressChanged
        wait.ProgressBar1.Value = e.ProgressPercentage
End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já está :P tinha o WorkerReportsProgress  = False nas propriedades, nem tinha reparado! Obrigado!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora