| Re: Problema con TidFTP Abort |
|
 |
|
 |
|
 |
|
 |
Group: it.comp.lang.delphi · Group Profile
Author: Marco BreveglieriMarco Breveglieri Date: Sep 10, 2008 03:24
colde ha scritto:
> L'upload funziona perfettamente ma vorrei gestire anche la
> possibilità di bloccare il trasferimento e per fare questo ho inserito
> il comando Abort del componente [...]
Io ho usato un metodo differente, in un contesto simile.
I componenti Indy generalmente hanno degli eventi che vengono scatenati
per restituire lo stato del lavoro in corso (es. byte trasferiti su byte
totali).
All'interno del thread asincrono che sfrutta il componente Indy, ho
predisposto un flag per l'annullamento (campo booleano con una proprietÃ
per leggerlo/scriverlo).
Negli eventi che vengono scatenati col progredire dell'operazione,
verifico lo stato del flag (che può essere valorizzato a True da un
pulsante nell'interfaccia utente) e, se impostato, invoco "Abort" (la
procedura Delphi, non il metodo del componente) per interrompere il
processo.
Non so se questa sia la soluzione migliore o ideale, ma secondo me nel
tuo contesto corri dei rischi innanzitutto usando il metodo Suspend del
Thread, che arresta l'esecuzione del thread secondario, ma potrebbe
farlo nel bel mezzo dell'esecuzione di un metodo del componente TIdFTP,
lasciando il componente in uno stato non valido o consistente, magari
alterandolo poi del tutto quando si richiama il metodo Abort sul
componente stesso.
La granularità dei metodi Suspend/Resume non si riferiscono al singolo
metodo o procedura eseguiti, ma possono bloccare il thread in qualsiasi
punto, anche nel bel mezzo di metodi e procedure.
Ciao,
Marco.
|