Usuario
Abortar un thread creado en un formulario web

Pregunta
-
Hola a todos. Espero se encuentren bien.
Estoy haciendo una pagina web con Visual Studio 2010 y lenguaje VB. En uno de sus formularios tengo un botón que lanza un hilo (t1), el que ejecuta una subrutina principal. Esta subrutina principal, llama a varias subrutinas a su vez, hasta que el proceso termina (es un proceso de larga duración). El tema está, en que quiero darle la posibilidad al usuario a que pueda abortar o detener ese hilo en cualquier momento. Lo he intentado con "t1.abort()" en un botón aparte pero no me funciona. No sé cual será la causa. He visto muchos manuales y foros por internet y he seguido los ejemplos de estos pero en mi caso no funciona. No se si será por que el manejo de hilos en una web será distinto ???. Si alguien me puede orientar un poco se lo agradecería mucho
El pseudo código es algo así: (todo este código está en el archivo .aspx.vb de la pagina)
Partial Class ejecutar01
public t1 as Thread
Protected sub page_load ( )
t1 = Nwe Thread(AddressOf Me.subPrincipal)
t1.name = Session("usuario")
End sub
Protected sub Button1_click()
t1.Start()
End sub
Protected sub Button2_click()
t1.Abort()
End sub
Sub Principal ()
call calcula01()
call calcula02()
call calcula03()
End sub
End Class
Todas las respuestas
-
-
Muchas gracias Jose Luis. He probado con la instrucción que dices, pero con esa instrucción, se detiene el hilo principal, es decir, el que mantiene la pagina activa. El que yo quiero que se detenga es el "t1", sigue funcionando con la instrucción que me dices.
Gracias de todas formas. Si Alguien sabe como podría solucionarlo le agradecería mucho.
-
Saludos:
Aqui encuentras un link en donde enseña como crear el Abort():
Espero ayude.
Dios NO los llamo LAS DIEZ RECOMENDACIONES
- Propuesto como respuesta Jose Luis Vargas jueves, 21 de mayo de 2015 13:39
-
Bueno, el principal problema que veo con tu código es que la variable "t1" que controla el Thread es una variable de instancia dentro de la clase del formulario.
Recuerda que en una aplicación Web (a diferencia de una de escritorio) a cada "Click" de un botón la clase se construye, se ejecuta el evento, y se destruye la clase.
Por lo tanto la "t1" en la que haces un Start durante el Button1_Click es distinta de la "t1" a la que le haces el Abort durante el Button2_Click. En consecuencia, el Button2 no detiene el hilo que tenías asociado a la otra copia de la variable t1.
Tendrás que recurrir a alguna técnica de mantenimiento de estado para preservar la t1 entre los dos postbacks. Por ejemplo, podrías guardarla dentro del Session.
- Editado Alberto PoblacionMVP martes, 19 de mayo de 2015 20:29
- Propuesto como respuesta Sergio Parra jueves, 21 de mayo de 2015 9:35
-
-