Visual Basic.NET - Problemas con BackgroundWorker

 
Vista:

Problemas con BackgroundWorker

Publicado por manuel (1 intervención) el 30/03/2009 20:44:54
Hola a todos,
Estoy tratando de trabajar con el objeto BackgroundWorker y me presenta el problema que luego de realizar la rutina en segundo plano la aplicación queda colgada... (congelada).

Para hacer las pruebas simplemente escibo el avance de un ciclo for en un label y funciona sin problemas, pero cuando trato de escribir lineas en un data grid view es cuando el backgroundworker se detiene en su evento RunWorkerCompleted, sin mostrar ningun mensaje de error.

El codigo es el siguiente:

Private Sub inventario1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
CheckForIllegalCrossThreadCalls = False
Me.PictureBox1.Visible = False
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.PictureBox1.Visible = True
Me.BackgroundWorker2.RunWorkerAsync(0)
End Sub

Private Sub BackgroundWorker2_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
Me.PictureBox1.Visible = True
CargarDatos(e.Argument)
End Sub

Private Sub CargarDatos(ByVal i As Integer)
For i = 0 To 100
Me.Listado.Rows.Add(1)
'Me.Listado.Rows(i).Cells(0).Value = i
Threading.Thread.Sleep(50)
Me.BackgroundWorker2.ReportProgress(i)
Next
End Sub

Private Sub BackgroundWorker2_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
Me.PictureBox1.Visible = True
CargarDatos(e.Argument)
End Sub

Private Sub BackgroundWorker2_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker2.ProgressChanged
Me.lblContar.Text = e.ProgressPercentage
End Sub

Private Sub BackgroundWorker2_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted
If Not (e.Error Is Nothing) Then
MessageBox.Show(e.Error.Message)
Else
Me.PictureBox1.Visible = False
End If
End Sub

Agradeceré sus comentarios.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder