Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/09/2009, 15:44
Avatar de xjuanch0x
xjuanch0x
 
Fecha de Ingreso: septiembre-2009
Mensajes: 125
Antigüedad: 15 años, 7 meses
Puntos: 1
Mecánica ThreadPool

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