programa se tranca

Iniciado por bomba1990, 27 Junio 2010, 20:19 PM

0 Miembros y 1 Visitante están viendo este tema.

bomba1990

hago uan consulta para ver si alguien me peude ayudar. estoy haciendo un programa que tiene que analizar muchas cosas y a veces se pega trabajando porque es mucha informacion. Aunque el termian de ahcer su trabajo y culmina con exito.

A mi me gustaria que mientras el se pega por lo menos pudiera ir mostrando una barra de progreso o algo por el estilo y no logro hacer que lo haga, e tratado con u label que vaya mostrando el progreso pero el programa no logra mostrar nada porque se pega.

¿que solucion podria tener este problema?
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Maik33

Seguramente uses un bucle, si pones DoEvents en el, cre que funcionara

Crypto 136

Creo que deberias agregar mas detalles sobre esa aplicacion, pero te recomiendo que hagas el programa en partes, optimiza el codigo, trata de poner la menor cantidad de codigo en la funcion principal,crea mas funciones y separa todo para que no recargues la memoria creo que es lo que se me ocurre con los datos que nos das...

bomba1990

bueno por ejemplo una parte del programa se encarga de listar los directorios y agregarlos en una base de datos. con pocos archivos puede ser rapido, pero con 20000 archivos se echa su ratica como unos 3min. Pero a mi me gustaria que en esos 3min yo pueda poner un label o halgo que valla imprimeindo como va el progreso del programa. Es todo lo que quiero, aqui esta el codigo:


Código (vb) [Seleccionar]
Public Function Listar_Directorios(directorio As String)
Dim Subdirectorio As Folder
Dim ruta As String
Dim ext As String


    Set El_Directorio = fso.GetFolder(Trim$(directorio))
   
    If existe("archivos", "ruta", directorio) Then Else ejecutar ("INSERT INTO `archivos` (`ruta`, `carpeta` )VALUES ('" & seguridad(directorio) & "', 1) ")
   
    For Each El_Archivo In El_Directorio.Files
        ruta = El_Directorio.Path & "\" & El_Archivo.Name
        If existe("archivos", "ruta", ruta) Then
        Else
        ext = extensión(El_Archivo.Name)
        ejecutar ("INSERT INTO `archivos` (`ruta`, `extensión`, `tamaño` )VALUES ('" & seguridad(ruta) & "', '" & ext & "', '" & FileLen(ruta) & "') ")
        End If
    Next El_Archivo

    For Each Subdirectorio In El_Directorio.SubFolders
        ruta = El_Directorio.Path & "\" & Subdirectorio.Name
        If existe("archivos", "ruta", ruta) Then Else ejecutar ("INSERT INTO `archivos` (`ruta`, `carpeta` )VALUES ('" & seguridad(ruta) & "', 1) ")
        Listar_Directorios (Subdirectorio)
    Next
   

   
End Function
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

Psyke1

Agregas una ProgressBar y pones esto:
Código (vb) [Seleccionar]
ProgressBar1.Max = El_Directorio.Files
Y dentro del bucle pones:
Código (vb) [Seleccionar]
ProgressBar1.Value = El_Archivo

Salu2! ;)

bomba1990

Gracias, lo puse en prueba y funciona, bien bien. no se tranca por lo menos gracias.
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

BlackZeroX

Cita de: *PsYkE1* en 28 Junio 2010, 03:37 AM
Agregas una ProgressBar y pones esto:
Código (vb) [Seleccionar]
ProgressBar1.Max = El_Directorio.Files
Y dentro del bucle pones:
Código (vb) [Seleccionar]
ProgressBar1.Value = El_Archivo

Salu2! ;)

Código (vb) [Seleccionar]
ProgressBar1.Max = El_Directorio.Files

si El_Directorio.Files es mayor de lo que puede aceptar ProgressBar1.Max va a hacer un OverFlow es mejor una regla de tres xP

Donde:

Código (Vb) [Seleccionar]

    ProgressBar1.Max = 30000 ' // = Cantidad de Archivos "Dejar 30000" para calcular con regla de tres.
'   //  Por lo tanto para calcular el value
    with ProgressBar1
        .value = NumeroArchivoActual * .max / El_Directorio.Files
    end with


Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

Psyke1

Cita de: BlackZeroX▓▓▒▒░░ en 28 Junio 2010, 08:42 AM
Cita de: *PsYkE1* en 28 Junio 2010, 03:37 AM
Agregas una ProgressBar y pones esto:
Código (vb) [Seleccionar]
ProgressBar1.Max = El_Directorio.Files
Y dentro del bucle pones:
Código (vb) [Seleccionar]
ProgressBar1.Value = El_Archivo

Salu2! ;)

Código (vb) [Seleccionar]
ProgressBar1.Max = El_Directorio.Files

si El_Directorio.Files es mayor de lo que puede aceptar ProgressBar1.Max va a hacer un OverFlow es mejor una regla de tres xP

Donde:

Código (Vb) [Seleccionar]

    ProgressBar1.Max = 30000 ' // = Cantidad de Archivos "Dejar 30000" para calcular con regla de tres.
'   //  Por lo tanto para calcular el value
    with ProgressBar1
        .value = NumeroArchivoActual * .max / El_Directorio.Files
    end with


Sangriento Infierno Lunar!¡.

JAJAJAJJAJA :laugh:
Cierto!!
Se me paso por completo!! :¬¬

Salu2! :P