Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

[Solucionado] Ejecucion De Proceso Que No Bloquee El Formulario

[Solucionado] Ejecucion De Proceso Que No Bloquee El Formulario
Artículo
Responder citando    Descargar mensaje  
Mensaje [Solucionado] Ejecucion De Proceso Que No Bloquee El Formulario 
 
Hola chicos,

Por asuntos de trabajo me he ausentado un tiempo de las lides de gambas nuestra herramienta de trabajo.

Ahora que en chile tenemos un fin de semana largo gracias a las fiestas patrias trabajare en la herramienta Sycnapsis que diseñe para crear copias de directorios ya que quedo un poco "chapucera" como dicen ustedes en españa.

Ahora a la pregunta.
Diseñe la aplicación para que al presionar el botón de comparación de directorios y determinar que hacer con cada archivo o directorio vaya mostrando el avance de la revisión gracias a la instrucción WAIT. Eso quedo cool ya que muestro una barra de progreso y el archivo en revisión.

el problema que se me presento fue que, cuando corrí el proceso para un directorio con una biblioteca gigante de Ebooks que me conseguí por ahí, con mas de 15mil libros y sus respectivos directorios y archivos asociados resultaron en mas de 45mil registros a revisar. y se quedo pegada la app sin poder hacer nada con ella.

Lo único que tengo claro es que cuando este corriendo el proceso debo preguntar por un flag/variable que me señale que quieren cancelarlo para abortar.
No tengo ninguna idea de como lograr lo anterior y que no quede bloqueada cuando el usuario se enfrente a una situación familiar.

Acepto ideas.



 
última edición por chaskux el Viernes, 22 Septiembre 2017, 16:38; editado 2 veces 
chaskux - Ver perfil del usuario Enviar mensaje privado  
chaskux [ Viernes, 15 Septiembre 2017, 15:23 ]
 


[Solucionado] Ejecucion De Proceso Que No Bloquee El Formulario
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
No es nada difícil: Si añades un retardo a wait, (el mínimo, creo es 0.001) das oportunidad a otros controles de ejecutar su evento.
Es decir, cada vez que se hace wait, se termina todo proceso pendiente en el bucle de eventos y ahí puedes cancelar el proceso que deseas terminar.
Como un ejemplo vale más que mil palabras, te he hecho un pequeño proyecto que lista un directorio de manera recursiva con una barra de progreso sobre el número de ficheros que contiene cada directorio y lo muestra en un TextArea. Pulsando el botón "Cancelar", finalizas la tarea a medias.
 captura_de_pantalla_de_2017_09_15_18_47_37

ListaFicheros-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ListaFicheros-0.0.1.tar.gz
Tamaño: 11.75 KB
Descargado: 18 veces
ListaFicheros-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ListaFicheros-0.0.1.tar.gz
Tamaño: 11.75 KB
Descargado: 18 veces
ListaFicheros-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: ListaFicheros-0.0.1.tar.gz
Tamaño: 11.75 KB
Descargado: 18 veces




 
última edición por shordi el Viernes, 15 Septiembre 2017, 17:48; editado 1 vez 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 15 Septiembre 2017, 17:48 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Este es el código del Formulario:

Private bCancel As Boolean

Public Sub Button2_Click()

  bCancel = True

End

Public Sub DirBox1_Change()

  listado(DirBox1.Value)
    bCancel = False

End

Public Sub listado(path As String)

    Dim arDir As String[]
    Dim arFile As String[]
    Dim nombredir, nombrefile As String
    Dim nombresolo As String
    Dim n As Integer
    
    If bCancel Then Return
    arfile = Dir(path, "*", gb.file)  'extraemos los ficheros
    For Each nombrefile In arfile  
         Inc n
         TextArea1.text &= path &/ nombrefile & gb.newLine
         ProgressBar1.Value = n / arfile.Count
         Wait 0.001
         If bCancel Then Break
    Next
    n = InStr(path, "/")
    If n > 0 Then
        nombresolo = Right(path, - n + 1)
    Else
        nombresolo = path
    Endif
    ardir = Dir(path, "*", gb.Directory)
    For Each nombredir In arDir 'extraemos los subdirectorios
         TextArea1.text &= path &/ nombredir & gb.newLine
         Wait 0.001
         If bCancel Then Break
         listado(path &/ nombredir) 'usamos la recursividad
    Next
    
 Catch
    Message("Error: " & Error.Text & "\nEn: " & Error.where)

End

 




 
última edición por shordi el Viernes, 15 Septiembre 2017, 17:51; editado 1 vez 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 15 Septiembre 2017, 17:50 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Por cierto... mi biblioteca ya tiene 54.212 libros... y subiendo.

     



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 15 Septiembre 2017, 17:52 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
shordi escribió: [Ver mensaje]
No es nada difícil: Si añades un retardo a wait, (el mínimo, creo es 0.001) das oportunidad a otros controles de ejecutar su evento.
Es decir, cada vez que se hace wait, se termina todo proceso pendiente en el bucle de eventos y ahí puedes cancelar el proceso que deseas terminar.
Como un ejemplo vale más que mil palabras, te he hecho un pequeño proyecto que lista un directorio de manera recursiva con una barra de progreso sobre el número de ficheros que contiene cada directorio y lo muestra en un TextArea. Pulsando el botón "Cancelar", finalizas la tarea a medias.
 captura_de_pantalla_de_2017_09_15_18_47_37




Excelente.... llegando a casa lo pruebo.... puede ser que el wait que tengo este muy corto por que los botones de verdad es que no se pueden presionar....

Gracias



 
chaskux - Ver perfil del usuario Enviar mensaje privado  
chaskux [ Viernes, 15 Septiembre 2017, 18:09 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
shordi escribió: [Ver mensaje]
Por cierto... mi biblioteca ya tiene 54.212 libros... y subiendo.

     



buen trabajo... los tienes en que formato???... yo los tenfo en EPUB... con calibre los transformo a mobi cuando necesito leerlos... (estoy viendo la compra de un nook para leer directo en epub).



 
chaskux - Ver perfil del usuario Enviar mensaje privado  
chaskux [ Viernes, 15 Septiembre 2017, 18:10 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Epub, epub, por supuesto. Mi Kobo se los devora que da gusto      



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Viernes, 15 Septiembre 2017, 18:37 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Podes usar matrices de texto para poner los archivos que vas a revisar o sobre los que vas a actuar y luego controlas el proceso con el numero de avance. Te dejo un ejemplo.

Saludos.

cortar-for-next-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: cortar-for-next-0.0.1.tar.gz
Tamaño: 11.98 KB
Descargado: 24 veces
cortar-for-next-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: cortar-for-next-0.0.1.tar.gz
Tamaño: 11.98 KB
Descargado: 24 veces
cortar-for-next-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: cortar-for-next-0.0.1.tar.gz
Tamaño: 11.98 KB
Descargado: 24 veces




 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Viernes, 15 Septiembre 2017, 19:19 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Uff, el ejemplo que subí es supero rudimentario comparado con el de Shordi, bueno espero sirva de algo.

Respecto a los formatos, si es un reader que no soporta epub no te lo compres. Sony, Kobo y unos cuantos mas lo soportan.

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Viernes, 15 Septiembre 2017, 19:24 ]
Responder citando    Descargar mensaje  
Mensaje Re: Ejecucion De Proceso Que No Bloquee El Formulario 
 
Shordi usando recursividad   ...más peligroso que un barbero con hipo!.  

Saludos



 
Shell - Ver perfil del usuario Enviar mensaje privado  
Shell [ Sabado, 16 Septiembre 2017, 08:39 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron