entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Duda: Iniciar y detener (viceversa) un thread en VB.NET

HOLA UN SALUDO

Actualmente estoy haciendo especie de protector de pantalla con VB.NET.

enter image description here

En mi aplicación muevo una imagen(pictureAstro) por la pantalla del formulario al pasar 2 segundos; hago uso de un THREAD ó hilo el cuál inicia el sub proceso para mover la imagen en pantalla.
El hilo es iniciado con el evento de un timer luego de 2 segundos utilizando el método ".start" del thread; ahora bien la ejecución del hilo es correcta, pero ocurre que quiero hacer uso del evento MouseMove, para que cuando el usuario mueva el mouse por la pantalla, el thread se detenga y active el timer para volver a esperar 2 segundos antes de volver a iniciar el thread y mover nuevamente la imagen, para esto utilizo el ".abort" del thread.
Mi código en resumen :

Imports System.Threading

Public Class Form1
      Public x as Integer
      Public y as Integer
      Private HILO_MOVE As Thread 'Declaramos el hilo

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        x=0
        y=0
        HILO_MOVE = New Thread(AddressOf astroMove)
        'Establecemos el intervalo de tiempo para que inicie el evento
        Timer1.Interval = 2000 '2segundos
        Timer1.Start()
    End Sub

    'Función que ejecuta el movimiento de la imágen
    Private Sub astroMove()
       'Aqui van los codigos para mover una imágen usando :
      While True
             While x <= 789
                x = x + 4
                pictureAstro.Location = New Point(x, y)

                Application.DoEvents()
                System.Threading.Thread.Sleep(100)
            End While
      End While
    End Sub

    'EVENTO TIMER
    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

        'Para que al arrancar el hilo no se vaya todo al joraca
        Control.CheckForIllegalCrossThreadCalls = False

        'Pasado el tiempo, empezamos el hilo para movimiento
        HILO_MOVE.Start()
        'Esto evita que se vuelva a iniciar pasado el tiempo
        Timer1.Enabled = False
    End Sub

    'EVENTO MOUSE
    Private Sub pictureFondo_MouseMove(sender As Object, e As MouseEventArgs) Handles pictureFondo.MouseMove
        x = 0
        y = 0
        Timer1.Enabled = True
        HILO_MOVE.Abort()
    End Sub

End class

Ahora el error ocurre cuando luego de haber sido abortado el hilo ".abort", es vuelto a ser iniciado por el evento del timer ".start" ya que me genera la siguiente excepción :

enter image description here

Cómo puedo solucionar éste error ?

1 Respuesta

1voto

carlossevi Puntos63580

según la documentación un hilo no se puede volver a iniciar después de haberlo abortado o interrumpido.

¿Has probado a declarar un hilo nuevo cada vez?

Sustituye la línea

HILO_MOVE.Start() 

por

HILO_MOVE = New Thread(AddressOf astroMove)
HILO_MOVE.Start()

Es decir, cada vez que vayas a necesitar lanzarlo de nuevo, lo inicializas como nuevo hilo.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta