Salve a tutti.
Ho creato un browse di un array che quando cambia la riga selezionata, legge alcune informazioni dal disco e me le visualizza su una sezione di dialog a destra del browse.
in pratica faccio un
oBrw:bChange:={| | MyFunction()}
Il problema è che nel caso in cui l'utente tiene premuta la freccia verso il basso o scorra rapidamente la rotellina del mouse e si hanno quindi una serie successiva di chiamate al metodo bChange il sistema va in errore eseguendo alcune operazioni di MyFunction.
Non sono riuscito a ripetere il problema ma sembrerebbe si verifichi in taluni casi quando si opera in rete.
Ho allora ideato questo sistema che esegue MyFunction solo se è passato un secondo dalla chiamata a bChange:
oBrw:bChange:={| | Wait1Second(),MyFunction()}
function Wait1Second()
local nSeconds
nSeconds:=seconds()
do while .t.
sysrefresh()
if seconds()-nSeconds>1
exit
endif
enddo
In modo tale che se l'utente continua la selezione il controllo ripassa al browse prima di eseguire MyFunction.
Il problema che rimane è che alla fine quando il cliente interrompe la selezione e finalmente passa il secondo che ho imposto vengono eseguiti tanti bAction quante solo state le righe di browse selezionato mentre io vorrei venisse eseguito solo l'ultimo bAction.
Spero di essermi spiegato. Avete qualche soluzione a riguardo ?
Grazie in anticipo