none
Usar BackgroundWorker con progresbarr RRS feed

  • Pregunta

  • hola a todos   esot desarrollando un software  escaner  usb antivirus y quiero agregar una barra de progreso  que avance segun el analizis .. esube viendo que se hace con  BackgroundWorke y con DoWork   el codigo que yo tengo cuando realizo el analizis  lo llamo desde un boton que el codigo analizador esta en un modulo y no se como meterlo en evento DOWORK para que lo que analize  su progreso dejo parte del codig aver si alguien me peude explicar un poco o ayudarme por favor 

     Private Sub Button6_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnAnaUSB.Click
            If ComboUSB.SelectedIndex = -1 Then
                MsgBox("Favor de seleccionar una unidad validad. . .", MsgBoxStyle.Exclamation, "Unidad no valida. . .")
                ComboUSB.Focus()
                Exit Sub
            End If

            BackgroundWorker1.RunWorkerAsync()

            Me.ProgressBar1.Maximum = 100


            NoAM.an.Text = " ANALIZANDO USB"
            Static yaEstoy As Boolean
            If yaEstoy Then
                Cancelar = True
                'InterAnaVir = True 'nterrumpio el analisis. . . 
                Me.BtnAnaUSB.Text = "Cancelando..."
                NoAM.an.Text = " ANALIZANDO USB"
                LStatusUsb.Text = "Archivos Detectados"
                Ftn.Status("El usuario a Cancelado el analisis de busqueda de virus USB. . . a las " & DateTime.Now.ToString("HH:mm:ss"), Me, Err:=True)
                Application.DoEvents()
                Exit Sub
            End If
            yaEstoy = True

            ' Guardar los datos de configuración y estado de la ventana
            USBguardarConfig()
            Me.Cursor = Cursors.AppStarting
            Me.BtnAnaUSB.Text = "Cancelar"
            Me.Refresh()
            imageListLVUSB.Images.Clear()

            ' Esta colección se usará para saber los directorios examinados
            ' con idea de que no se comprueben más de una vez
            ' (por ejemplo si se indica el mismo directorio más de una vez)
            LVUsb.Items.Clear()

            'dirExaminados.Clear()
            'ArchivosAnaVir.Clear()


            ' InterAnaVir = False
            ' Mostrar un gif animado mientras se está buscando          (28/Dic/07)
            'PicLupa.Top = LvVirus.Top + (LvVirus.Height \ 4)
            'PicLupa.Left = (Me.Width - PicLupa.Width) \ 2
            'PicLupa.BringToFront()
            ' Ocultar el ListView, esto acelera el proceso de búsqueda  (27/Dic/07)
            'Me.LvVirus.Visible = False
            'LStatusVir.Visible = False

            Ftn.Status("Inicio el analisis para busqueda de virus en " & ComboUSB.Text & ". . .a las " & DateTime.Now.ToString("HH:mm:ss"), Me)


            LStatusUsb.Text = "Buscando virus en su equipo. . ."
            ' Usar el StopWatch para calcular el tiempo empleado        (28/Dic/07)
            Dim stopW As Stopwatch
            stopW = Stopwatch.StartNew
            'Ftn.Status("Inicia analicis a las " & DateTime.Now.ToString("HH:mm:ss"), Me)
            Dim di As New DirectoryInfo(ComboUSB.Text.Trim()) 'Se kitan los espacios en blanco
            If di.Exists = False AndAlso di.Attributes = FileAttributes.Archive Then
                di = New DirectoryInfo(Path.GetDirectoryName(di.FullName))
            End If
            If di.Exists Then
                AnalizaUSB(di.FullName, LVUsb, chkElimAutorrun.Checked, True)
                ProgressBar1.Value = ProgressBar1.Value + 10

                'recorrerDir(di, chkAnaConSubDir.Checked, My.Settings.AnaFiltro, My.Settings.AnaIgnorarError, Me.LvVirus)
            End If

            'Me.LvVirus.Visible = True
            'LStatusVir.Visible = True
            stopW.Stop()
            Dim totalSec As Double = stopW.ElapsedMilliseconds / 1000
            Dim totalMin As Double = CInt(totalSec / 60)
            totalSec = totalSec - totalMin * 60
            If Cancelar = False Then Ftn.Status("Termina Analisis a las " & DateTime.Now.ToString("HH:mm:ss"), Me)


            NoAM.an.Text = "FIN DEL ANALIZIS"
            Me.Cursor = Cursors.Default
            Me.BtnAnaUSB.Text = "Buscar"
            ' Los botones de abrir fichero o directorio
            ' solo habilitarlos si hay algo en el ListView
            ' La asignación de los ficheros hallados se hace en esta comprobación,
            ' para mostrar un mensaje más adecuado al no hallar ficheros

            Me.LInfo3.Text &= String.Format(" Tiempo empleado: {0:#,##0.##} min {1:#,##0.0000} seg", totalMin, totalSec)
            NoAM.LInfo3.Text &= String.Format(" Tiempo empleado: {0:#,##0.##} min {1:#,##0.0000} seg", totalMin, totalSec)
            Me.Refresh()
            Cancelar = False
            yaEstoy = False
        End Sub

    EL de arriba es del boton que llama al codigo analizador que esta   en el modulo siguiente 

    Public Sub AnalizaUSB(ByVal vUnidad As String, ByVal vLV As ListView, ByVal ElmAutorrum As Boolean, ByVal SubCarpetas As Boolean)
            Application.DoEvents()
            'System.Threading.Thread.Sleep("100")
            NoAM.an.Text = " ANALIZANDO USB"
            If ElmAutorrum Then 'Firma del Autorrun 
                NoAM.LInfo3.Text = "Buscando autorun.inf. . ."
                NoAM.LInfo3.Refresh()
                FPrincipal.LInfo3.Text = "Buscando autorun.inf. . ."
                FPrincipal.LInfo3.Refresh()

                If My.Computer.FileSystem.FileExists(vUnidad & "autorun.inf") Then
                    FPrincipal.LUContArch.Text = Val(FPrincipal.LUContArch.Text) + 1
                    FPrincipal.LUContArch.Refresh()
                    If (File.GetAttributes(vUnidad & "autorun.inf") And FileAttributes.System) = FileAttributes.System Then
                        FPrincipal.LUContInfe.Text = Val(FPrincipal.LUContInfe.Text) + 1
                        FPrincipal.LUContInfe.Refresh()
                        Try
                            File.SetAttributes(vUnidad & "autorun.inf", FileAttributes.Normal)
                            File.Delete(vUnidad & "autorun.inf")
                            imageListres.Images.Add(My.Resources.Ok.ToBitmap)
                            imageListLVUSB.Images.Add(My.Resources.Ok.ToBitmap) 'CAMBIAR LUEGO!!!!!!!!!!!!!!
                            Dim item As ListViewItem = vLV.Items.Add(vUnidad & "autorun.inf", imageListLVUSB.Images.Count - 1)
                            Dim item1 As ListViewItem = NoAM.res.Items.Add(vUnidad & "autorun.inf", imageListres.Images.Count - 1)
                            item1.SubItems.Add("Virus reconocido por firma Generica (Autorun)")
                            item1.SubItems.Add("Se elimino autorun.inf")
                            item.SubItems.Add("Virus reconocido por firma Generica (Autorun)")
                            item.SubItems.Add("Se elimino autorun.inf")

    ese es una parte del modulo por si sirve de algo el analizis continua mas  pero como ven el llamado del analizis se llama desde el boton ..!! GRACIAS  TODOS 


    alejandro

    • Cambiado Enrique M. Montejo viernes, 7 de noviembre de 2014 10:13 Pregunta relacionada con controles de Windows Forms.
    martes, 4 de noviembre de 2014 0:00

Todas las respuestas

  • Hola Alejandro:

    Mírate estos dos links que te solucionarán el problema:

    Barra de Progreso con BackgroundWorker

    ProgressBar con BackgroundWorker

    Un saludo.

    Gemma



    • Editado gemma_campillo martes, 4 de noviembre de 2014 8:22 Error en link
    martes, 4 de noviembre de 2014 8:17
  • si estuve viendo algo logre pero  igual no explica  bien al iniciar el sacaner  la barra de progreso funciona pero cuando el escaner termina  no se completa queda para  en la mitad ponele, y cuando vuelvo hacer escanear , no vuelve arrancar desde cero la barra de  progreso !!! gracias 

    alejandro

    martes, 4 de noviembre de 2014 22:34
  • Lo que me dice es qeu no puedo usar un elemento String yo intento atraves del FOR 

    1. Dim blnRunInModule As Boolean = False
    2.         For intCount As Integer = 1 To 10
    3.             If blnRunInModule Then
    4.                 Module1.MySub(intCount)
    5.             Else
    6.                 BGW.ReportProgress(intCount)
    7.             End If
    8.             System.Threading.Thread.Sleep(1000)
    9.         Next
    10.     End Sub

     

     Encontre eso pero  mi modulo  con el analizador es asi 

        Public Sub AnalizaUSB(ByVal vUnidad As String, ByVal vLV As ListView, ByVal ElmAutorrum As Boolean, ByVal SubCarpetas As Boolean)


    alejandro

    martes, 4 de noviembre de 2014 23:32