Programación asincrónica con Piscinas de hilos (Thread Pools)
Alguna vez han tratado de ejecutar un proceso muy grande en el evento load de un fomulario o al presionar un boton y se cuelga la aplicacion debido a la cantidad de inforacion a procesar.
Solucion:
Mecánica ThreadPool
El trabajo se añade a la ThreadPool añadiendo un delegado WaitCallback a la cola de la piscina. Cuando la cola esté lista, se utiliza el delegado para completar la tarea.Aunque no es necesario para manejar el hilo, si el delegado de hilo interactúa con formularios Windows, entonces tendrá que ser muy cuidadoso ya que se pueden generar algunas excepciones.
Hagan una prueba en el evento load del Formulario traten de cargar 10.000.000 de numeros a un listbox en un ciclo
y Despues haganlo con el codigo que les copie acontinuacion y veran la diferencia
Imports System.Threading
Public Class Form1
Public Delegate Sub WaitCallback(ByVal estado As Object)
Private valor As String
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
ThreadPool.QueueUserWorkItem((AddressOf Initialize))
End Sub
Private Sub Add()
ListBox1.Items.Add(valor)
End Sub
Public Sub Initialize(ByVal estado As Object)
SyncLock ListBox1.GetType
For index As Integer = 1 To 10000000
valor = index
ListBox1.Invoke(CType(AddressOf Add, MethodInvoker))
Next
End SyncLock
End Sub
End Class