Todo desarrollador que se preocupe por el rendimiento de las aplicaciones que implementa debe conocer sobre el desarrollo con múltiples hijos (threads). El namespace system.threading contiene lo necesario para crear y administrar el multi-hilo de una aplicación.
Para crear un thread es necesario seguir los siguientes pasos:
- Crear un método sin argumentos y que no retorne datos.
- Crear un ThreadStart delegate que haga referencia al método creado en el paso anterior
- Crear un objeto Thread que haga referencia al ThreadStart delegate anterior.
- Invocar al thread.start para iniciar la ejecución del nuevo hilo.
Veamos un ejemplo de cómo crear un thread que despliega una línea de texto en la consola.
Imports System.threading
Module Module1 Sub DespliegaMensaje() Console.WriteLine("Mensaje, generado por el hilo: {0}", Thread.CurrentThread.ManagedThreadId) End Sub Sub Main() Dim metodo_a_ejecutar As New ThreadStart(AddressOf DespliegaMensaje) Dim NuevoHilo As New Thread(metodo_a_ejecutar) NuevoHilo.Start() Console.ReadKey() NuevoHilo.Abort() End Sub End Module |
Ahora veamos un ejemplo con varios threads
Imports System.threading
Module Module1 Sub DespliegaMensaje() For i As Integer = 1 To 5 Console.WriteLine("Mensaje, generado por el hilo: {0}", Thread.CurrentThread.ManagedThreadId) Next End Sub Sub Main() Dim metodo_a_ejecutar As New ThreadStart(AddressOf DespliegaMensaje) Dim hilos(5) As Thread For i As Integer = 1 To 5 hilos(i) = New Thread(metodo_a_ejecutar) hilos(i).Start() Next Console.ReadKey() For i As Integer = 1 To 5 hilos(i).Abort() Next End Sub End Module |
En algunas ocasiones es necesario esperar que alguno de los hilos finalice para proseguir con la ejecución de nuestro código, para esto utilizamos el método join:
Hilo.Join() |
También podemos controlar la prioridad de cada hilo, esto lo hacemos con el método priority utilizando el enumerado ThreadPriority.
Highest | La más alta prioridad |
AboveNormal | Alta prioridad |
Normal | Prioridad normal |
BelowNormal | Prioridad baja |
Lowest | La más baja prioridad |