Ya está, lanzar el proceso paraba la ejecución de ese sub-thread (yo pensaba que no), por eso el while no funcionaba, aunque me daba la sensaciónd e que sí,
así que tengo que hacer un nuevo thread para ejecutar el proceso, y hacer las comprobaciones en el antiguo thread mientras ese nuevo thread se está ejecutando.
listo,
Saludos!
Esta es la situación:
Al darle a un botón, ejecuto un proceso que va generando pequeños archivos en un directorio, con este patron: "Disc.zip.001", "Disc.zip.002", "Disc.zip.003"
Y lo que intento es, mientras se van generando esos archivos, ir contandolos para agregar un valor a una barra de progreso,
es decir, si se han de crear 50 archivos, pero de momento solo se han creado 20 archivos, pues examino el directorio para obtener el número "20", y el valor que le doy a la barra de progreso es "20".
Este es el Problema:
Algo pasa con la variable o con el while, porque el progreso no se muestra, la variable no suma el valor,
me da la sensación de que el io.directory.getfiles solo se ejecuta una vez, y es cuando el directorio está vacio (sin archivos zip) y por eso el valor no aumenta... es "0"
ya que cuando el directorio está lleno de archivos zip, si vuelvo a darle al botón, me muestra el valor correcto, por eso pienso que sólo se ejecuta una vez... a pesar de estar dentro de un while.
Este es el código:
Código
Dim Volumes If Copy_Mode = "Zip" And Not Want_to_cancel_thread = True Then While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True If Want_to_cancel_thread Then Exit While ' Esta comprobación funciona corréctamente, sin problemas. ' Esto de aquí no aumenta de valor... o al menos sólo lo hace una única vez, no lo sé... : Volumes = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*") InvokeControl(ProgBarPlus, Sub(x) x.Value = Volumes.Length) 'InvokeControl(ProgBarPlus, Sub(x) x.Refresh()) ' He probado a refrescar el control, pero creo que es problema de la variable. End While End If
Cuando le doy al botón para generar los zips:
(el valor no aumenta ni nada!)
Cuando le doy al botón en un directorio que ya contiene zips (esto es hacer trampa, pero es para ver si así si que funciona):
(me muestra el valor correcto)
¿Alguien me puede decir si el código está bien, o he cometido algún error?
EDITO:
También he probado así, pero nada, el valor sigue siendo 0, solo se procesa una única vez...creo...
Código
While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True InvokeControl(ProgBarPlus, Sub(x) x.Value = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length) End While End If
EDITO 2:
Y esto:
Estoy seguro de que la comprobación sólo se ejecuta una vez.. porque si el directorio está vacío no me muestra NADA (no hay msgbox), pero si el directorio está lleno, me muestra el msgbox...
Código
While Not Run_Process(TempDir & "Splitty_7zip.exe", " a " & """" & Selected_Output_Directory & "\Disc.zip" & """" & " " & """" & Selected_Directory & """" & " -v" & Selected_Disc_Bytes.ToString & "b " & " -mx=0 -bd -tzip", False, True) = True If Want_to_cancel_thread Then Exit While MsgBox(IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length) ' InvokeControl(ProgBarPlus, Sub(x) x.Value = IO.Directory.GetFiles(Selected_Output_Directory, "*.zip.*").Length) End If End While End If