PDA

Visualizza la versione completa : [DELPHI] Impedire eventi su ciclo for


VaLvOnAuTa
06-10-2005, 10:18
Lo so il titolo non Ŕ autoesplicativo, ma non saprei come riassumere meglio :D

In pratica il software che ho sviluppato utilizza delle connessioni tcp con un server. Alcune volte capita che il server invii dei trigger verso uno o pi¨ client connessi. Se il trigger Ŕ di aggiornamento, il client inizia un ciclo for per aggiornare dei campi in una listview. Il problema Ŕ che se l'utente fortunosamente compie un'azione durante il ciclo potrebbe far sballare il counting delle righe facendo uscire un errore di "list out of bounds".

C'Ŕ possibilitÓ di inibire le azioni prima del ciclo e riabilitarle successivamente?

alka
06-10-2005, 10:25
Originariamente inviato da VaLvOnAuTa
C'Ŕ possibilitÓ di inibire le azioni prima del ciclo e riabilitarle successivamente?
Banalmente, potresti usare un campo booleano (Boolean) da impostare a True quando inizia un'operazione che deve impedire ad altre di intervenire sulla situazione in cui si lavora, usando eventualmente un costrutto try...finally.


if LockFlag then
Exit;
LockFlag := True;
try
// ...ciclo sugli elementi
finally
LockFlag := False;
end;

In questo caso, se Ŕ in corso un ciclo sugli elementi, il tentativo di reiterare lo stesso metodo, o un metodo che si basa sullo stesso principio controllando il flag, viene impedito. Il costrutto try...finally garantisce che il flag venga resettato anche in caso di errore.

Se Ŕ necessario ritardare la risposta all'evento piuttosto che impedirla, Ŕ necessario allora usare elementi di sincronizzazione come Mutex oppure Critical Section.

Ciao! :ciauz:

VaLvOnAuTa
06-10-2005, 10:37
Grazie mille per l'idea.
Pensavo ci fosse un metodo per "lockare" l'applicazione in maniera globale.

P.S. Immagino che se metto la variabile booleana tra le public declarations del form, il valore di questa sarÓ modificabile anche dai form "figli".

In ogni caso grazie mille :zizi:

Loading