Crear un proceso de monitorización

Crear un proceso de monitorización

En este caso vamos a ver la aplicación de hebras desde una perspectiva diferente a la utilizada en las anteriores situaciones.

El objetivo del proyecto HebraMonitor (hacer clic aquí para acceder a este ejemplo), consiste en introducir una clave numérica en un TextBox, que cuando sea de seis números y coincida con un valor que contiene el código de la aplicación, mostrará un mensaje indicando el éxito de la operación. Naturalmente, el código que va a estar permanentemente monitorizando el valor que hay en el TextBox, se ejecutará desde una hebra que iniciaremos o pararemos cuando queramos. Ver el Código fuente 493.

Private oHebra As Thread

Private Sub btnIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIniciar.Click

' instanciar una hebra y ponerla en ejecución oHebra = New Thread(AddressOf ComprobarClave) oHebra.Start()

End Sub

Private Sub btnParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnParar.Click

' detener la hebra que está en ejecución oHebra.Abort()

Me.lblContador.Text = "" Me.lblEstado.Text = ""

End Sub

' procedimiento que se ejecutará dentro ' de la hebra creada en la aplicación Public Sub ComprobarClave()

Dim iContadorPasos As Integer

While True iContadorPasos += 1 Me.lblContador.Text = iContadorPasos If Me.txtClave.Text.Length = 6 Then

If Me.txtClave.Text = "778899" Then Me.lblEstado.Text = "CORRECTA" Else Me.lblEstado.Text = "NO ES CORRECTA" End If Else Me.lblEstado.Text = "" End If

Programación con Visual Basic .NET © Grupo EIDOS

' frenar la ejecución de la hebra oHebra.Sleep(250)

End While

End Sub

Código fuente 493

Podemos observar que una vez iniciada la hebra, se comienza la ejecución de un bucle infinito, que muestra en un Label la cantidad de ocasiones en que se realiza la comprobación, y si el valor introducido en el TextBox es o no correcto. En cualquier momento, podemos detener el proceso, pulsando el botón btnParar, que ejecuta el método Abort() de la hebra.

Otro detalle que se nos puede pasar por alto, radica en el hecho de que si iniciamos la hebra y cerramos el formulario, la hebra sigue en ejecución; podemos comprobar esto abriendo el menú Depurar de Visual Studio, en el que sorprendentemente, aparecerá la opción Detener depuración, lo cual indica que hay todavía un proceso en ejecución, "¿pero como?, si yo he cerrado el formulario", pues sí, hemos cerrado el formulario, pero no hemos detenido el proceso que pusimos en marcha.

Para que no se quede ningún proceso fuera de control, lo que hacemos en este caso, es codificar el evento Closed( ) del formulario, que se desencadena cuando el formulario es cerrado. En este evento, comprobamos si la hebra está todavía activa mediante su propiedad IsAlive; en el caso de que esta propiedad devuelva True, cancelamos la ejecución de la hebra. Ver Código fuente 494.

Private Sub Form1_Closed(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed

' si código de la aplicación no ha finalizado ' la hebra, debemos hacerlo antes de terminar ' la ejecución del programa If Not (oHebra Is Nothing) Then

If oHebra.IsAlive Then oHebra.Abort() End If End If

End Sub

Código fuente 494

La Figura 289 muestra el formulario de este proyecto.

Figura 289. Proceso de monitorización en una hebra.

© Grupo EIDOS 32. Programación con hebras