Foros del Web » Programación para mayores de 30 ;) » .NET »

Mecánica ThreadPool

Estas en el tema de Mecánica ThreadPool en el foro de .NET en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 14/09/2009, 15:44
Avatar de xjuanch0x  
Fecha de Ingreso: septiembre-2009
Mensajes: 125
Antigüedad: 14 años, 8 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 14:08.