Italian ProgressDialog e doevent

luciano deri

Active Member
Licensed User
Longtime User
Il tanto deprecato DoEvent lo avevo usato per far girare il progressdialog durante una elaborazione.
Non posso sostituire con Sleep(0) in quanto fa il return.
Quindi?
B4X:
    strquery = "SELECT * FROM tabella "
    dbcursor = Main.dbSql.ExecQuery(strquery)
    Dim documento As String
    For i = 0 To dbcursor.RowCount - 1
        dbcursor.position = i
        ProgressDialogShow("Lettura tabella in corso")
        DoEvents
    next
 

Star-Dust

Expert
Licensed User
Longtime User
Continua con DoEvents
 

Star-Dust

Expert
Licensed User
Longtime User
Già.
Il punto é che non esiste un corrispondente in Java. esiste la pausa "Sleep" (non quello che ha creato Erel Sleep e Wait For), é un istruzione Java che ferma per un tempo X il programma. Ma non fa avanzare la GUI (interfaccia grafica gestita dal O.S.)
B4X:
Dim jo As JavaObject
Dim l As Long = 500
jo.InitializeStatic("java.lang.Thread").RunMethod("sleep", Array(l))

Il DoEvents ferma il flusso dell'esecuzione del programma, ma fa andare avanti l'O.S. e la GUI.

Anche il Wait For e lo Sleep di Java che puoi usare con Threading Library, non ottieni lo stesso risultato, perché ti permette di far girare alcune thread in multitaskig (e parallelamente) e quindi fermarne uno e far avanzare gli altri thread (magari fai avanzare solo la grafica) però oltre che si crea un gran casino nella progettazione e non ottieni sempre lo stesso risultato.

Ecco perché devi usare DoEvents
 

Star-Dust

Expert
Licensed User
Longtime User
Quando Erel ha detto che poteva sostituire DoEvents, non diceva in senso generale ma per alcuni specifici utilizzi. Anzi per alcuni utilizzi é ottimale WaitFor e Sleep e ti far risparmiare codice e tempo di progettazione.
Per non é utilizzabile per tutti gli usi perché non sono corrispondenti.
 

luciano deri

Active Member
Licensed User
Longtime User
Ok grazie. Basterebbe non fare terrorismo mediatico dichiarando che "it can lead the stability issues"
 

Star-Dust

Expert
Licensed User
Longtime User
In parte é vero, in certi casi limite rende instabile il sistema e comunque Erel deve vendere il nuovo prodotto quindi spinge un pò.
 

luciano deri

Active Member
Licensed User
Longtime User
In parte é vero, in certi casi limite rende instabile il sistema e comunque Erel deve vendere il nuovo prodotto quindi spinge un pò.
Si almeno dalla versione 4 di Android, ad esempio guiai a metterlo nel focuschange o nell'eterpressed di un edittext, però una volta capite le criticità si usa. Mi era sembrato di capire che con la versione 7 il DoEvents è diventato ancora più instabile.
 

Star-Dust

Expert
Licensed User
Longtime User
Se vuoi togliere DoEvents devi riscrivere il codice usando la lettura asincrona del DataBase. Attendere il completamento della lettura (magari con WaitFor) e poi nascondere la progressBar
 

Star-Dust

Expert
Licensed User
Longtime User
In alternativa lascia il DoEvents. Per me lo lascerei
 
Top