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
Parts
» Visual branding biro perjalanan alam (1)
» El manifiesto del ensamblado
» Instalación de Visual Studio .NET
» Grabando texto en un fichero
» Principales elementos en nuestro entorno de trabajo
» Manejo de ventanas adicionales del IDE
» Conceptos mínimos sobre depuración
» Comparación de cadenas en base a un patrón. El operador Like
» Uso de paréntesis para mejorar la legibilidad de expresiones
» Sintaxis de un procedimiento Function
» Sobrecarga de procedimientos
» Abordando un problema mediante programación procedural
» Creación de propiedades para la clase
» Encapsulación a través de propiedades
» Creación de métodos para la clase
» Sobrecarga de métodos o polimorfismo, en una misma clase
» Espacios de nombres (namespaces)
» Acceso a espacios de nombre de otros ensamblados
» Herencia y sobre-escritura de métodos
» Diferencias entre sobrecarga y sobre-escritura en base al tipo de enlace
» Ocultamiento de miembros de una clase
» Comportamiento de las palabras clave Me, MyClass y MyBase ante la sobre-escritura de métodos
» Herencia y métodos constructores
» Clases abstractas o no instanciables
» Comprobación del tipo de un objeto y moldeado (casting)
» Destrucción de objetos y recolección de basura
» Creación y manipulación de estructuras
» Estructuras o clases, ¿cuál debemos utilizar?
» Manipulación de cadenas con la clase String
» Optimizando la manipulación de cadenas con la clase StringBuilder
» Extender las funcionalidades de una clase a través de delegados
» La clase EventArgs, o cómo obtener información del objeto emisor del evento
» Obtención de subarrays a partir de un objeto ArrayList
» Manejo básico de colecciones Hashtable
» Operaciones varias con colecciones Hashtable
» Manipulación de valores en una colección Queue
» Implementando un interfaz para crear una nueva colección
» Manipulación estructurada de errores
» La influencia del orden de los manipuladores de excepciones
» Creación de excepciones personalizadas
» Manipulación de archivos mediante File y FileInfo
» Manipulación de archivos mediante Directory y DirectoryInfo
» Monitorización del sistema de archivos con FileSystemWatcher
» Creación de un formulario básico
» Iniciar el formulario desde Main( )
» Codificación de los eventos de controles
» Selección de texto en un TextBox
» Compartiendo código entre controles
» Crear una clase derivada de un control
» Agregar un proyecto con un formulario derivado
» Crear un formulario heredado desde un proyecto independiente
» Creación de menús desde código
» Detectando el estado de finalización
» Crear un proceso de monitorización
» Comportamiento Modal de formularios
» Formularios dependientes y fijos en primer plano
» Dibujo con las clases Graphics y Pen
» Manipulación de los eventos de pintado en la clase Form
» Manipulando el grado de opacidad del formulario
» Integrando elementos. Un visualizador de gráficos
» Comparativa de ADO /ADO .NET
» Arquitectura de datos desconectados
» Una visión general de ADO .NET
» Espacios de nombres y clases en ADO .NET
» Empleo de Data Binding simple para navegar y editar datos
» Configurar por código las propiedades del DataGrid
Show more