Ciao a tutti! Mi ritrovo ad aggiornare un vecchio progetto, ed avendo sostituito i vecchi Msgbox con i nuovi MsgboxAsync, ho un comportamento strano: dopo aver invocato quest'ultimo, sul display mi compare il messaggio però l'esecuzione continua a prescindere. Credo di aver sbagliato la gestione della sincronia. Ecco la parte di codice in questione:
B4X:
Sub Activity_Create (FirstTime As Boolean)
Set_App 'richiamo questa funzione, di cui sotto
Set_Layout
'altro codice
End Sub
Sub Set_App
If File.Exists("percorso","abc.de") = False Then 'Primo avvio
Dim ro As Object = Msgbox2Async("File di avvio non trovato." & CRLF & "Utilizzare il fle di default?","File mancante","SÌ","","NO",Null,False)
Wait For (ro) Msgbox_Result (res As Int)
If res = DialogResponse.POSITIVE Then
'ecc ecc
End Sub
Dopo l'esecuzione della riga con la Wait For, viene mostrato correttamente il messaggio sul display, ma l'esecuzione continua con la funzione Set_Layout (come se si interrompesse l'esecuzione di Set_App e continua con la funzione successiva presente nell'Activity_Create).
Potete dirmi dove sbaglio? Grazie mille
Questo avviene perché Set_App non è di tipo ResumableSub e non viene chiamata tramite WaitFor.
Però un WaitFor-Complete in Create non è neanche una buona idea. Quindi sarebbe meglio che la sub Create terminasse chiamando una normale sub (es. MioStart), la quale utilizzi in sequenza il WaitFor su SetAPP e poi il SetLayout (che comunque potrebbe essere anche la conclusionen di SetApp setssa).
Questo avviene perché Set_App non è di tipo ResumableSub e non viene chiamata tramite WaitFor.
Però un WaitFor-Complete in Create non è neanche una buona idea. Quindi sarebbe meglio che la sub Create terminasse chiamando una normale sub (es. MioStart), la quale utilizzi in sequenza il WaitFor su SetAPP e poi il SetLayout (che comunque potrebbe essere anche la conclusionen di SetApp setssa).
Grazie mille per la spiegazione, ho inquadrato il problema.
Il fatto è che si tratta di un grosso e vecchio progetto e ci sono centinaia e centinaia di Wait For Msgbox_Result, risulta molto stressante modificare il tutto, uno per uno...
Grazie mille per la spiegazione, ho inquadrato il problema.
Il fatto è che si tratta di un grosso e vecchio progetto e ci sono centinaia e centinaia di Wait For Msgbox_Result, risulta molto stressante modificare il tutto, uno per uno...
Grazie mille per la spiegazione, ho inquadrato il problema.
Il fatto è che si tratta di un grosso e vecchio progetto e ci sono centinaia e centinaia di Wait For Msgbox_Result, risulta molto stressante modificare il tutto, uno per uno...
I MsgBox potrebbero bloccare l'app solo nel caso in cui l'utente metta in pausa (per un bel po' di tempo) l'app con uno di questi "attivo", visualizzato.
Per nuovi progetti potresti usare quelli asincroni, ma mettersi a sostituire decine di essi in un grosso progetto non vale la pena.