Spanish Ayuda con ProgressBar

benji

Active Member
Licensed User
Longtime User
Me funciona pero no como realmente creo(?) que debe funcionar...

en este caso, el cursor toma 77 mil registros, al iniciar la barra se va a 1 (inicio) pero se queda pegada ahi, hasta que termina, nunca se actualiza y solo desaparece cuando termina... en simple, no hay una muestra del progreso para el usuario, entonces, que me falta para que muestre el progreso como debe?

de antemano, muchas gracias.

B4X:
For i = 0 To data.Size - 1
    cur = data.Get(i)
    AuxCodigo = cur.Get("codigo")
    AuxLote = cur.Get("lote")
    AuxUMB = cur.Get("umb")
    AuxVenc = cur.Get("vencimiento")
    Main.DBLocalWMS.ExecNonQuery2("Insert into Lote values(?,?,?,?)",Array As Object(AuxCodigo,AuxLote,AuxUMB,AuxVenc))
    Label1.Text = i & " / " & (data.Size - 1)
    ProgressBar1.Value = Round(i / 1000)
Next
ProgressBar1.Value = 100
 

josejad

Expert
Licensed User
Longtime User
Has probado con:
B4X:
ProgressBar1.Value = (i*100)/data.Size
?

saludos,
 
Last edited:

benji

Active Member
Licensed User
Longtime User
Gracias, lo voy a probar. Aunque mi duda más que nada va por el lado que no se mueve la barra, más que el porcentaje de avance. Lo pruebo y les comento.
 

josejad

Expert
Licensed User
Longtime User
Prueba a poner un Sleep(0) al final del bucle para que se refresque el UI
 

benji

Active Member
Licensed User
Longtime User
Prueba a poner un Sleep(0) al final del bucle para que se refresque el UI
esta opcion funciona, el pero es que en 7 mil registros se demora 6 minutos, sin esto los 77 mil registros se procesan en poco menos de un minuto.

alguna otra idea para aplicar?

gracias.
 

angel_

Well-Known Member
Licensed User
Longtime User
Y si actualizas cada 10%

B4X:
If i Mod Round(data.Size * 0.1) = 0 then
    'Se muestra cada 10%'
    ProgressBar1.Value = (i*100)/data.Size
    sleep(0)
End If
 

benji

Active Member
Licensed User
Longtime User
Y si actualizas cada 10%

B4X:
If i Mod Round(data.Size * 0.1) = 0 then
    'Se muestra cada 10%'
    ProgressBar1.Value = (i*100)/data.Size
    sleep(0)
End If

funciona, pero se demora 9 minutos en 77 mil registros
creo que pondré un mensaje de procesando mejor jajaja....

gracias por las ideas, si sale una nueva, la pruebo. Gracias nuevamente.
 

josejad

Expert
Licensed User
Longtime User
¿Has probado en modo release?
De todas formas, la forma correcta seria hacerlo de forma asincrona en una transaccion con wait for
 

benji

Active Member
Licensed User
Longtime User
¿Has probado en modo release?
De todas formas, la forma correcta seria hacerlo de forma asincrona en una transaccion con wait for
El wait for no es lo que tenía en mente, pero funciona mejor que el mensaje de "insertando"... Voy a probar mas tarde.
Gracias.
 
Top