SOS! Cuelgues con transferencias FTP!

05/01/2005 - 16:26 por Alicia | Informe spam
Hola,
tengo una aplicacion que se conecta vía ftp con un servidor para bajar un
archivo. Todo funciona bien excepto cuando quiero poner un botón por si el
usuario quiere cancelar a medio la transferencia.
En ese caso llamo al método cancelar del componente ftp y el programa se
cuelga automáticamente.

Ya he probado con dos componentes de ftp gratuitos que he encontrado por
internet y con los dos me pasa lo mismo... osea que creo que el problema soy
yo que no lo estoy programando bien...

En la ayuda del último componente pone que al cancelar la transferencia se
haga en un thread diferente porque el principal está colgado haciendo el get
del archivo. El caso es que lo haga como lo haga se cuelga.

¿Alguna sugerencia o ejemplo?

Aquí hay un trozito de código de cuando pulso el botón cancelar:

Private cancelarT As Thread
cancelarT = New Thread(New ThreadStart(AddressOf modmain.Cancelar))
cancelarT.Start()

Private Sub Cancelar()
ftp.CancelTransfer()
End Sub


Saludos!

Preguntas similare

Leer las respuestas

#1 news.microsoft.com
05/01/2005 - 21:10 | Informe spam
Hola,

Mira, no expones mucho el codigo que usas, pero me parece que tendrias que
tener en un thread un loop, y dentro de este controlar el get por ftp,
de este loop saldrias solo si se pulsa cancelar o si termino la descarga,
agregas al loop un do events y preguntas si termino la descarga o se
presiono cancel.
Para el caso de se haya presionado cancel, simplemente cortas el hilo de
conexion, no el download, capturas el evento que te da el fin de conexion y
ahi seteas la variable que sale del loop. Para el caso en que termine la
descarga es igual, solo que no cortas nada y en el evento seteas la
variable.

Al no conocer el codigo que usas para la conexion ftp no puedo saber que es
lo que hace al llamar el evento ftp.canceltransfer, por eso no te escribo el
codigo.

Espero haberte ayudado.

Roberto

"Alicia" escribió en el mensaje
news:%
Hola,
tengo una aplicacion que se conecta vía ftp con un servidor para bajar un
archivo. Todo funciona bien excepto cuando quiero poner un botón por si el
usuario quiere cancelar a medio la transferencia.
En ese caso llamo al método cancelar del componente ftp y el programa se
cuelga automáticamente.

Ya he probado con dos componentes de ftp gratuitos que he encontrado por
internet y con los dos me pasa lo mismo... osea que creo que el problema


soy
yo que no lo estoy programando bien...

En la ayuda del último componente pone que al cancelar la transferencia se
haga en un thread diferente porque el principal está colgado haciendo el


get
del archivo. El caso es que lo haga como lo haga se cuelga.

¿Alguna sugerencia o ejemplo?

Aquí hay un trozito de código de cuando pulso el botón cancelar:

Private cancelarT As Thread
cancelarT = New Thread(New ThreadStart(AddressOf modmain.Cancelar))
cancelarT.Start()

Private Sub Cancelar()
ftp.CancelTransfer()
End Sub


Saludos!


Respuesta Responder a este mensaje
#2 Alicia
07/01/2005 - 11:21 | Informe spam
Hola Roberto,
gracias por tu respuesta.
Creo que mas o menos lo he entendido pero dime una cosa: ¿Sería lo mismo
hacer lo siguiente?

- Hacer el get en un thread diferente del principal y pasar de el (sin el
bucle que me comentas), se supone que se queda ahí ejecutándose mientras
hace el get...
- Si se pulsa el botón Cancelar matar ese thread directamente...

¿Sería igual o voy perdida?

Gracias.
Saludos.

"news.microsoft.com" escribió en el mensaje
news:
Hola,

Mira, no expones mucho el codigo que usas, pero me parece que tendrias


que
tener en un thread un loop, y dentro de este controlar el get por ftp,
de este loop saldrias solo si se pulsa cancelar o si termino la descarga,
agregas al loop un do events y preguntas si termino la descarga o se
presiono cancel.
Para el caso de se haya presionado cancel, simplemente cortas el hilo de
conexion, no el download, capturas el evento que te da el fin de conexion


y
ahi seteas la variable que sale del loop. Para el caso en que termine la
descarga es igual, solo que no cortas nada y en el evento seteas la
variable.

Al no conocer el codigo que usas para la conexion ftp no puedo saber que


es
lo que hace al llamar el evento ftp.canceltransfer, por eso no te escribo


el
codigo.

Espero haberte ayudado.

Roberto

"Alicia" escribió en el mensaje
news:%
> Hola,
> tengo una aplicacion que se conecta vía ftp con un servidor para bajar


un
> archivo. Todo funciona bien excepto cuando quiero poner un botón por si


el
> usuario quiere cancelar a medio la transferencia.
> En ese caso llamo al método cancelar del componente ftp y el programa se
> cuelga automáticamente.
>
> Ya he probado con dos componentes de ftp gratuitos que he encontrado por
> internet y con los dos me pasa lo mismo... osea que creo que el problema
soy
> yo que no lo estoy programando bien...
>
> En la ayuda del último componente pone que al cancelar la transferencia


se
> haga en un thread diferente porque el principal está colgado haciendo el
get
> del archivo. El caso es que lo haga como lo haga se cuelga.
>
> ¿Alguna sugerencia o ejemplo?
>
> Aquí hay un trozito de código de cuando pulso el botón cancelar:
>
> Private cancelarT As Thread
> cancelarT = New Thread(New ThreadStart(AddressOf modmain.Cancelar))
> cancelarT.Start()
>
> Private Sub Cancelar()
> ftp.CancelTransfer()
> End Sub
>
>
> Saludos!
>
>


Respuesta Responder a este mensaje
#3 news.microsoft.com
07/01/2005 - 21:05 | Informe spam
Mira, lo que pensas hacer no te lo recomiendo ya que estas matando el thread
de una instancia de clase creada (el get que se ejecuta) fuera del uso de la
misma.
Deberias, dentro del mismo thread correrse el correspondiente
canceldownload... no se si me explico.
Para esto, corres el get y vas monitoreando la descarga (seguro que hay una
propiedad bytesreceived y bytestotal) dentro de un loop con la condicion de
que
en el caso de que si una variable es true siga monitoreando y caso contrario
haga el canceldownload. De esta forma no vas a tener problemas, ya que haces
el
cancel desde el mismo lugar en el que estas haciendo el get y en el mismo
thread. Esa es mi opinion, lo que decis se puede hacer, pero yo no lo
haria.



Espero que me hayas entendido un abrazo

Roberto

Por otro lado,
"Alicia" escribió en el mensaje
news:
Hola Roberto,
gracias por tu respuesta.
Creo que mas o menos lo he entendido pero dime una cosa: ¿Sería lo mismo
hacer lo siguiente?

- Hacer el get en un thread diferente del principal y pasar de el (sin el
bucle que me comentas), se supone que se queda ahí ejecutándose mientras
hace el get...
- Si se pulsa el botón Cancelar matar ese thread directamente...

¿Sería igual o voy perdida?

Gracias.
Saludos.

"news.microsoft.com" escribió en el mensaje
news:
> Hola,
>
> Mira, no expones mucho el codigo que usas, pero me parece que tendrias
que
> tener en un thread un loop, y dentro de este controlar el get por ftp,
> de este loop saldrias solo si se pulsa cancelar o si termino la


descarga,
> agregas al loop un do events y preguntas si termino la descarga o se
> presiono cancel.
> Para el caso de se haya presionado cancel, simplemente cortas el hilo de
> conexion, no el download, capturas el evento que te da el fin de


conexion
y
> ahi seteas la variable que sale del loop. Para el caso en que termine la
> descarga es igual, solo que no cortas nada y en el evento seteas la
> variable.
>
> Al no conocer el codigo que usas para la conexion ftp no puedo saber


que
es
> lo que hace al llamar el evento ftp.canceltransfer, por eso no te


escribo
el
> codigo.
>
> Espero haberte ayudado.
>
> Roberto
>
> "Alicia" escribió en el mensaje
> news:%
> > Hola,
> > tengo una aplicacion que se conecta vía ftp con un servidor para bajar
un
> > archivo. Todo funciona bien excepto cuando quiero poner un botón por


si
el
> > usuario quiere cancelar a medio la transferencia.
> > En ese caso llamo al método cancelar del componente ftp y el programa


se
> > cuelga automáticamente.
> >
> > Ya he probado con dos componentes de ftp gratuitos que he encontrado


por
> > internet y con los dos me pasa lo mismo... osea que creo que el


problema
> soy
> > yo que no lo estoy programando bien...
> >
> > En la ayuda del último componente pone que al cancelar la


transferencia
se
> > haga en un thread diferente porque el principal está colgado haciendo


el
> get
> > del archivo. El caso es que lo haga como lo haga se cuelga.
> >
> > ¿Alguna sugerencia o ejemplo?
> >
> > Aquí hay un trozito de código de cuando pulso el botón cancelar:
> >
> > Private cancelarT As Thread
> > cancelarT = New Thread(New ThreadStart(AddressOf modmain.Cancelar))
> > cancelarT.Start()
> >
> > Private Sub Cancelar()
> > ftp.CancelTransfer()
> > End Sub
> >
> >
> > Saludos!
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida