none
Abortar un thread creado en un formulario web RRS feed

  • 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

    martes, 19 de mayo de 2015 12:14

Todas las respuestas

  • Saludos:

    La instruccion de parar un thread es:

    Thread.CurrentThread.Abort()

    Espero ayude.

    JOSE LUIS


    Dios NO los llamo LAS DIEZ RECOMENDACIONES

    martes, 19 de mayo de 2015 14:30
  • 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.

    martes, 19 de mayo de 2015 15:11
  • Saludos:

    Aqui encuentras un link en donde enseña como crear el Abort():

    https://msdn.microsoft.com/en-us/library/5b50fdsz%28v=vs.110%29.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

    Espero ayude.

    JOSE LUIS


    Dios NO los llamo LAS DIEZ RECOMENDACIONES

    martes, 19 de mayo de 2015 20:11
  • 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.


    martes, 19 de mayo de 2015 20:29
  • Muchas gracias Alberto por tu aclaración. Lo que dices es lo que está ocurriendo con el hilo. Es mi primea incursión en proyectos web, por eso no sabía muy bien del tema. Muchas gracias por tu respuesta

    jueves, 21 de mayo de 2015 9:31
  • Muchas gracias José Luis por tu ayuda
    jueves, 21 de mayo de 2015 9:32