Ahora definitivamente ya estoy mas confundido... NO entiendo la diferencia entre
Hola Edgar:
La diferencia entre esos dos ejemplos es simplemente el bucle.
En uno hace, por ejemplo:
Dim i as int
i = 0
log(i)
i = 1
log(i)
Y en el otro hace:
Dim i as int
for i = 0 to 1
log(i)
next
No es más que eso.
Cuando estás ejecutando código y llamas a una sub, en este caso j.Download, el código sigue ejecutándose, por lo tanto JobDone puede ocurrir cuando ya has terminado en tu sub, o el usuario haya ejecutado otra tarea.
Con Wait For la sub no sigue ejecutándose, sino que se "queda esperando" a que el evento JobDone se dispare y entonces tu sub principal sigue ejecutándose desde donde estaba.
para respetar la integridad de la información, primero debo cargar los países, cuando estos ya estén cargados en la base de datos, ya puedo cargar los departamentos de cada país y cuando los departamentos de cada país ya estén cargados, ya puedo cargar los municipios de cada departamento de cada país.
Para hacer lo que quieres, tendrías que ir esperando a que cada sub que llamas termina, antes de llamar a la otra, por lo que sería algo como:
Sub CargarPaises As ResumableSub'Devolvemos true o false si se han leído correctamente los países
'Tu código para cargar los países
If SeHanCargadoOk Then
return True
else
return False
end if
End Sub
Sub CargarDepartamentos (pais as String) as ResumableSub
'Tu código para cargar los departamentos
If SeHanCargadoOk Then
return True
else
return False
end if
End Sub
Sub CargarMunicipios (departamento as string) as ResumableSub 'Puedes devolver true o false si se cargan bien, o devolver la lista de municipios
'Cargas los municipios
.....
If SeHanCargadoOk Then
ListaMuncipios = MunicipiosCargados
return True
else
return False
end if
End Sub
'Código principal
'Mostrar por ejemplo un B4XLoadingIndicator
Wait For (CargarPaises) Complete (SuccessPaises as Boolean) 'SuccessPaises sería True o False según lo que devuelva Cargar Países
If SuccessPaises Then
Wait For (CargarDepartamentos (paisLeído)) Complete (SuccessDepartamentos as Boolean)
If SuccessDepartamentos Then
Wait for (CargarMunicipios(departamentoLeído)) Complete (SuccessMunicipios as Boolean)
if SuccessMunicipios Then
Log("Se han cargado correctamente")
else
Log("No se han cargado los municipios")
end if
else
Log("No se han cargado los departamentos")
end if
Else
Log("No se han podido cargarlos países")
End If
'Ocultar tu B4XLoadingIndicator
end Sub
Ojo, como estás haciendo procesos que se quedan en espera, es importante mostrar algún mensaje indicador de carga al usuario para que no crea que durante esos segundos que dura el proceso, la app se ha bloqueado. (Por ejemplo un B4XLoadingIndicator)
No sé si me he explicado muy bien... y algún fallito puede haber
Remember that that a call to Sleep or Wait For in a resumable sub causes the code flow to return to the parent. Example: Sub Button1_Click Sum(1, 2) Log("after sum") End Sub Sub Sum(a As Int, b As Int) Sleep(100) 'this will cause the code flow to return to the parent Log(a + b) End Sub...
saludos,