Multiple background worker

Signaler
Messages postés
3
Date d'inscription
mercredi 21 octobre 2009
Statut
Membre
Dernière intervention
8 août 2012
-
Je dispose d'une application qui se connecte vers une base de données et effectue 4 requêtes.

voilà le scénario :
- 2 requêtes (1 et 2) remplissant chacune un DataGridView(ce qui en fait 2 DataGridView)
- 2 requêtes (3 et 4) chacune d'elles affecte l'un des DataGridView

Le second remplissage du DataGridView1 (requête 3) a été fait à l'aide d'un BackgroundWorker et ça marche bien.

ce que je veux faire maintenant c'est réaliser la même chose pour le DataGridView2 (requête 4)
j'ai essayer de réaliser un autre background Worker pour cette requête mais ça bloque

j'ai envisager de réaliser ce second backgroundWorker parce que je manipule des requêtes sql lourdes donc si je lance cette requête dans le 1er BackgroundWorker ça devient lourd et ça perd tout son avantage

voici un bout de code pour avoir une idée plus claire sur ce que je suis entrain de faire :

Dim sql As String = "requête 1"
Dim dataadapter As New SqlDataAdapter(Sql, connection)

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
connection.Open()
dataadapter.Fill(dt)
DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
DataGridView2.SelectionMode = DataGridViewSelectionMode.FullRowSelect
DataGridView1.DataSource = dt
Dim i As Integer
For i = 0 To 9
Dim variable As String = DataGridView1.Item(0, i).Value.ToString
Dim sql1 As String = "requête 2"
Dim dataadapter1 As New SqlDataAdapter(sql1, connection)
dataadapter1.Fill(dt1)
Next i
DataGridView2.DataSource = dt1
Timer1.Interval = 10000
Timer1.Start()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
dataadapter.Dispose()
BackgroundWorker1 = New BackgroundWorker
BackgroundWorker1.WorkerReportsProgress = True
BackgroundWorker1.RunWorkerAsync()
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim worker As BackgroundWorker = DirectCast(sender, BackgroundWorker)
Try
Dim sql2 As String = "requête 3"
Dim dataadapter2 As New SqlDataAdapter(sql2, connection)
dataadapter2.Fill(dt2)
e.Result = dt2
dataadapter2.Dispose()
Catch ex As Exception

End Try
End Sub

Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, _
ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
Dim dt2 As DataTable = DirectCast(e.Result, DataTable)
Me.DataGridView1.DataSource = dt2
End Sub


'Ce qui manque là c'est le bout de code concernant la requête 4 qui normalement f=doit être semblable à celui de la requête 3 (j'ai bien essayer de faire ça mai ça marche pas)