lunes, 11 de noviembre de 2013

Uso de BackgroundWorker (Hebras o Hilos, Threads) con Visual Basic (VB.NET). MultiThreading

Se trata de una pequeña aplicacion que muestra el uso del control BackgroundWorker para trabajos en Multitarea.

 


19 comentarios:

  1. Respuestas
    1. Hola: Muchas gracias. Comentarios como el tuyo animan a seguir haciendo cosas. Saludos.

      Eliminar
  2. Este video me encanta. Muchas Gracias por compartir

    ResponderEliminar
  3. Amigo si hago esto por que me marca error:
    Llamar a una subrutina en el evento de DoWork del backgroundworker
    Private Sub Backgroundworker_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles backgroundworker.DoWork
    Call Cargar_Articulos(dgvarticulos, "productos")
    End Sub

    A que se debera amigo, o como hago para que esa funcion se ejecute en segundo plano, de antemano gracias amigo.

    ResponderEliminar
    Respuestas
    1. Hola: Para responderte debidamente deberia ver tu aplicacion. ¿Puedes envirme un link para poder verla?. Lo que si puedo hacer es una aplicacion que ejecute subrutinas dentro de una hebra o un backgroundworker. ¿Te ayudaria eso?. Saludos.

      Eliminar
    2. Claro amigo, mira te explico un poco mejor el codigo..
      Tengo una subrutina llamada Cargar_Articulos(ByVal dgvartivulos As DataGriedView, ByVal tabla As string)

      La subrutina pasa como parametros un datagriedview, y una cadena de texto que es el nombre de una tabla.

      Mi aplicacion tiene un boton para cargar los registros en el data griedview, para eso llama a la subrutina Cargar_Articulos() pero el problema esta que cuando los carga la ventana aparece con un (No Responde)...
      Y después de poco termina de cargar los registros.

      Lo que queria hacer era llamar una subrutina en el evento DoWork de una BackGroundWorker, para que haga el proceso en segundo plano y no se detenga la aplicación.

      Lo intente pero no me funcionaba amigo, me gustaría que hicieras eso de ejecutar subrutinas dentro de una hebra en caso de que no me comprendas mucho mi problema, me conformo si me mandas un ejemplo de como ejecutar las subrutinas en una función amigo, de preferencia si tienes tiempo y puedes que las subrutinas pasen parámetros para guiarme un poco con mi problema.

      De ante mano muchas gracias, Excelentes aportes (Y).

      Eliminar
    3. Hola:
      Estoy pasando unos dias fuera de casa. Intentare hacer una pequeña aplicacion demostrativa a la mayor brevedad posible.
      Te aviso cuando este lista.
      Saludos.

      Eliminar
    4. Hola:
      Tal como te comente lo ideal seria poder disponer de tu aplicacion para hacer pruebas.
      Te envio este codigo por si te sirve:

      Imports System.Threading
      Public Class Form1
      Dim HEBRA As Thread

      Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
      CheckForIllegalCrossThreadCalls = False
      HEBRA = New Thread(AddressOf RELLENAR)
      HEBRA.Start()
      End Sub

      Public Sub RELLENAR()
      Dim MIFINAL As Integer = 1000
      For I = 0 To MIFINAL
      MIRANDOM(I, MIFINAL)
      TextBox1.Text += I & vbCrLf
      Next
      End Sub

      Public Sub MIRANDOM(ByVal INICIO As Integer, ByVal FINAL As Integer)
      Dim generator As New Random
      Dim randomValue As Integer
      randomValue = generator.Next(INICIO, FINAL)
      Label1.Text = randomValue
      End Sub

      Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
      If Button3.BackColor = Color.Black Then
      Button3.BackColor = Color.Red
      Else
      Button3.BackColor = Color.Black
      End If
      End Sub

      Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
      Try
      HEBRA.Abort() 'PARA QUE CIERRE LA HEBRA SI ESTA ABIERTA
      Catch ex As Exception

      End Try
      End Sub
      End Class


      Lo que hace es poner numeros del 1 al 1000 en un textbox mientras que a traves de una subrutina calcula un numero aleatorio y lo pone en una etiqueta.
      Y permite que durante la ejecucion de lo anterior se pueda pulsar un boton que pasara de negro a rojo y viceversa al ser pulsado.
      Si no te sirve o necesitas alguna aclarion dejame un nuevo comentario.
      Saludos.

      Eliminar
  4. Muchisimas gracias! me fue de mucha utilidad!!

    ResponderEliminar
  5. Excelente aporte.
    Gracias

    ResponderEliminar
  6. Es mucho lo que tengo que agradecer, necesitaba esta solución. Saludos.

    ResponderEliminar
  7. Hola ,tengo que hacer una aplicación que tenga hilos,podrias ayudarme?

    ResponderEliminar